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自动安装pip
Apr 24 Python
python简单实现基数排序算法
May 16 Python
Python中的自省(反射)详解
Jun 02 Python
Python 私有函数的实例详解
Sep 11 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
Jul 26 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
Feb 13 Python
PyCharm 专业版安装图文教程
Feb 20 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
Python多线程实现支付模拟请求过程解析
Apr 21 Python
详解python logging日志传输
Jul 01 Python
Python爬虫基础初探selenium
May 31 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
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
python进程与线程小结实例分析
2018/11/11 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
创建与框架无关的JavaScript插件
2020/12/01 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python字符编码判断方法分析
2016/07/01 Python
使用Python生成XML的方法实例
2017/03/21 Python
import的本质解析
2017/10/30 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
python属于解释型语言么
2020/06/15 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
中考冲刺决心书
2014/03/11 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
2014年党支部承诺书
2014/05/30 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
导游词之阆中古城
2019/12/23 职场文书