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中DOM方法的动态性
Apr 11 Python
Python引用模块和查找模块路径
Mar 17 Python
详解Python函数作用域的LEGB顺序
May 14 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
使用python切片实现二维数组复制示例
Nov 26 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
python help函数实例用法
Dec 06 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
python创建与遍历List二维列表的方法
2019/08/16 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
初中生物教学反思
2014/01/10 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
授权委托书怎么写
2014/04/03 职场文书
电气自动化求职信
2014/06/24 职场文书
单位租房协议书范本
2014/12/04 职场文书
成绩报告单家长评语
2014/12/30 职场文书
员工自我评价范文
2015/03/11 职场文书
中学语文教学反思
2016/02/16 职场文书
Golang gRPC HTTP协议转换示例
2022/06/16 Golang