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实现简单的代理服务器
Jul 25 Python
浅谈Python基础之I/O模型
May 11 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python实现公司年会抽奖程序
Jan 22 Python
python多进程并发demo实例解析
Dec 13 Python
python接入支付宝的实例操作
Jul 20 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
Python机器学习之底层实现KNN
Jun 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
Php+SqlServer实现分页显示
2006/10/09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php缓冲输出实例分析
2015/01/05 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
Python如何实现MySQL实例初始化详解
2017/11/06 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
python中比较两个列表的实例方法
2019/07/04 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
医院检讨书范文
2014/02/01 职场文书
总经理工作职责范文
2014/03/14 职场文书
优秀党员事迹材料
2014/12/18 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
大学生入党自传2015
2015/06/26 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python