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 异常处理实例详解
Mar 12 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Python Requests库基本用法示例
Aug 20 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
Python 从attribute到property详解
Mar 05 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
Python字符串格式化f-string多种功能实现
May 07 Python
Python之qq自动发消息的示例代码
Feb 18 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实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
bootstrap模态框实现拖拽效果
2016/12/14 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
解读! Python在人工智能中的作用
2017/11/14 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Python使用APScheduler实现定时任务过程解析
2019/09/11 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
公司总经理岗位职责
2014/03/15 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL