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面向对象编程的知识点总结
Feb 14 Python
Python有序字典简单实现方法示例
Sep 28 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
django数据库自动重连的方法实例
Jul 21 Python
ipad上运行python的方法步骤
Oct 12 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 Python
你需要掌握的20个Python常用技巧
Feb 28 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程序员工具
2008/05/26 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
深入解析Python中函数的参数与作用域
2016/03/20 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
Django实现网页分页功能
2019/10/31 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
Python实现随机爬山算法
2021/01/29 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
护理专业毕业生自荐信范文
2014/01/05 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
商场中秋节活动方案
2014/02/07 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
2014年关工委工作总结
2014/11/17 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
创业计划书之家教托管
2019/09/25 职场文书