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写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
python图像处理之反色实现方法
May 30 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
Python Django Cookie 简单用法解析
Aug 13 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
python 遍历pd.Series的index和value
Nov 26 Python
python统计文章中单词出现次数实例
Feb 27 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
numpy数据类型dtype转换实现
Apr 24 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
pymysql模块的操作实例
2019/12/17 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
《日月潭》教学反思
2014/02/28 职场文书
现场施工员岗位职责
2014/03/10 职场文书
艾滋病宣传标语
2014/06/25 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2014年人事部工作总结
2014/12/03 职场文书
科技馆观后感
2015/06/08 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
如何在Python中妥善使用进度条详解
2022/04/05 Python
Python开发简易五子棋小游戏
2022/05/02 Python