python通过urllib2爬网页上种子下载示例


Posted in Python onFebruary 24, 2014

通过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('<a\s+href=\"(htm_data/[\d]+/[\d]+/[\d]+\.html).*?<\/a>', 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)
Python 相关文章推荐
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
Python实现包含min函数的栈
Apr 29 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
python 使用shutil复制图片的例子
Dec 13 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
python实现自动清理重复文件
Aug 24 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
python控制台显示时钟的示例
Feb 24 #Python
python3访问sina首页中文的处理方法
Feb 24 #Python
python原始套接字编程示例分享
Feb 21 #Python
python实现360皮肤按钮控件示例
Feb 21 #Python
python实现360的字符显示界面
Feb 21 #Python
python和pyqt实现360的CLable控件
Feb 21 #Python
python使用7z解压软件备份文件脚本分享
Feb 21 #Python
You might like
3
2006/10/09 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
twig模板常用语句实例小结
2016/02/04 PHP
js 操作符实例代码
2009/10/24 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
js实现简单的验证码
2015/12/25 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
小程序实现录音功能
2020/09/22 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
python 日志 logging模块详细解析
2020/03/31 Python
自我鉴定书范文
2013/10/02 职场文书
交通安全演讲稿
2014/01/07 职场文书
班组拓展活动方案
2014/08/14 职场文书
2015年财政所工作总结
2015/04/25 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server