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中使用matplotlib模块绘制数据图的示例
May 04 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
git进行版本控制心得详谈
Dec 10 Python
Python内置模块ConfigParser实现配置读写功能的方法
Feb 12 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
基于django传递数据到后端的例子
Aug 16 Python
python 公共方法汇总解析
Sep 16 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
Mar 03 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运算符的知识大全
2011/11/03 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
python下载图片实现方法(超简单)
2017/07/21 Python
浅谈Django的缓存机制
2018/08/23 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
中职生自我鉴定范文
2013/10/03 职场文书
土木工程求职信
2014/05/29 职场文书
应届生求职信
2014/05/31 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
个人党性锻炼总结
2015/03/05 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
解决MySQL报“too many connections“错误
2022/04/19 MySQL