python通过urllib2爬网页上种子下载示例
admin
2023-07-31 02:09:29
0

通过urllib2、re模块抓种子

思路

1.用程序登录论坛(如果需要登录才能访问的版块)

2.访问指定版块

3.遍历帖子(先取指定页,再遍历页面所有帖子的url)

4.循环访问所有帖子url,从帖子页面代码中取种子下载地址(通过正则表达式或第三方页面解析库)

5.访问种子页面下载种子

复制代码 代码如下:
import urllib
import urllib2
import cookielib
import re
import sys
import os

# site is website address | fid is part id
site = \”http://xxx.yyy.zzz/\”
source = \”thread0806.php?fid=x&search=&page=\”

btSave = \”./clyzwm/\”
if os.path.isdir(btSave):
 print btSave + \” existing\”
else:
 os.mkdir(btSave)

logfile = \”./clyzwm/down.log\”
errorfile = \”./clyzwm/error.log\”
sucfile = \”./clyzwm/sucess.log\”

headers = {\’User-Agent\’ : \’Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\’, 
           \’Referer\’ : \’http://xxx.yyy.zzz/\’}

def btDown(url, dirPath):
 logger(logfile, \”download file : \” + url)
 try:
  #pageCode = urllib2.urlopen(url).read()
  #print pageCode
  btStep1 = re.findall(\’http://[\\w]+\\.[\\w]+\\.[\\w]{0,4}/[\\w]{2,6}\\.php\\?[\\w]{2,6}=([\\w]+)\’, url, re.I)
  #print btStep1
  if len(btStep1)>0:
   ref = btStep1[0]
   downsite = \”\”
   downData = {}
   if len(ref)>20:
    downsite = re.findall(\’http://www.[\\w]+\\.[\\w]+/\’, url)[0]
    downsite = downsite + \”download.php\”
    reff = re.findall(\’input\\stype=\\\”hidden\\\”\\sname=\\\”reff\\\”\\svalue=\\\”([\\w=]+)\\\”\’, urllib2.urlopen(url).read(), re.I)[0]
    downData = {\’ref\’: ref, \’reff\’:reff, \’submit\’:\’download\’}
   else:
    downsite = \”http://www.downhh.com/download.php\”
    downData = {\’ref\’: ref, \’rulesubmit\’:\’download\’}
   #print \”bt site – \” +  downsite + \”\\n downData:\”
   #print downData
   downData = urllib.urlencode(downData)
   downReq = urllib2.Request(downsite, downData)
   downReq.add_header(\’User-Agent\’,\’Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\’)
   downPost = urllib2.urlopen(downReq)
   stream = downPost.read(-1)
   if (len(stream) > 1000):
    downPost.close()
    name = btStep1[0]+ \”.torrent\”
    fw = open(dirPath + name, \’w\’)
    fw.write(stream)
    fw.close()
    logger(sucfile, url+\”\\n\”)
   else:
    logger(errorfile, url+\”\\n\”)
 except urllib2.URLError, e:
  print e.reason

def logger(logfile, msg):
 print msg
 fw = open(logfile, \’a\’)
 fw.write(msg)
 fw.close()

for i in range(1, 1000):
 logger(logfile, \”\\n\\n\\n@ page \” + str(i) + \” …\”)
 part = site + source + str(i)

 content = urllib2.urlopen(part).read()
 content = content.decode(\’gbk\’).encode(\’utf8\’)
 #print content

 pages = re.findall(\'\’, content,re.I)
 #print pages

 for page in pages:
  page = site + page;
  #logger(logfile, \”\\n# visiting \” + page + \” …\”)
  pageCode = urllib2.urlopen(page).read()
  #print pageCode
  zzJump = re.findall(\’http://www.viidii.info/\\?http://[\\w]+/[\\w]+\\?[\\w]{2,6}=[\\w]+\’ ,pageCode)  
  #zzJump = re.findall(\’http://www.viidii.info/\\?http://[\\w/\\?=]*\’, pageCode)
  if len(zzJump) > 0:
   zzJump = zzJump[0]
   #print \”- jump page – \” + zzJump
   pageCode = urllib2.urlopen(page).read()
   zzPage = re.findall(\’http://[\\w]+\\.[\\w]+\\.[\\w]+/link[\\w]?\\.php\\?[\\w]{2,6}=[\\w]+\’ ,pageCode)
   if len(zzPage) > 0:
    zzPage = zzPage[0]
    logger(logfile, \”\\n- zhongzi page -\” + zzPage)
    btDown(zzPage, btSave)
   else:
    logger(logfile, \”\\n. NOT FOUND .\”)
  else:
   logger(logfile, \”\\n… NOT FOUND …\”)
  zzPage = re.findall(\’http://[\\w]+\\.[\\w]+\\.[\\w]+/link[\\w]?\\.php\\?ref=[\\w]+\’ ,pageCode)

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...