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 相关文章推荐
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
Python脚本实时处理log文件的方法
Nov 21 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
python事件驱动event实现详解
Nov 21 Python
Python WEB应用部署的实现方法
Jan 02 Python
在Python中表示一个对象的方法
Jun 25 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
python 实现图片修复(可用于去水印)
Nov 19 Python
pytorch显存一直变大的解决方案
Apr 08 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 URL地址获取函数代码(端口等) 推荐
2010/05/15 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
Javascript 获取LI里的内容
2008/12/17 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
React组件中的this的具体使用
2018/02/28 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python脚本替换指定行实现步骤
2017/07/11 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
python实现梯度下降法
2020/03/24 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
土木工程专业自荐信
2013/10/04 职场文书
卖车协议书
2014/04/21 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
会议主持词开场白
2015/05/28 职场文书
预备党员半年考察意见
2015/06/01 职场文书
行政处罚告知书
2015/07/01 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书