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的__builtin__模块中的一些要点知识
May 02 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
python实现汉诺塔方法汇总
Jul 25 Python
Django如何配置mysql数据库
May 04 Python
python爬取哈尔滨天气信息
Jul 14 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python 实现两个线程交替执行
May 02 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
Jun 24 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
Python提取PDF指定内容并生成新文件
Jun 09 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
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
javascript脚本调试方法小结
2008/11/24 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python自定义时钟类、定时任务类
2021/02/22 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
幼儿园中班开学寄语
2014/04/03 职场文书
技术比武方案
2014/05/19 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
红色故事演讲稿
2014/05/22 职场文书
干部个人对照检查材料
2014/08/25 职场文书
党员公开承诺书2016
2016/03/24 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书