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遍历删除字典里值为空的元素报错问题
Sep 11 Python
python一键升级所有pip package的方法
Jan 16 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
Django数据库操作之save与update的使用
Apr 01 Python
Python操作Excel把数据分给sheet
May 20 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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
PHP的FTP学习(一)
2006/10/09 PHP
php5.2时间相差8小时
2007/01/15 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
JS按钮闪烁功能的实现代码
2017/07/21 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
vue实现固定位置显示功能
2019/05/30 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
Python使用Matlab命令过程解析
2020/06/04 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
python字典按照value排序方法
2020/12/28 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
关于礼仪的演讲稿
2014/01/04 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
门店店长岗位职责
2015/04/14 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python
Java实现房屋出租系统详解
2021/10/05 Java/Android