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 相关文章推荐
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
Python实现单词拼写检查
Apr 25 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
PyQt5每天必学之布局管理
Apr 19 Python
Python堆排序原理与实现方法详解
May 11 Python
查看Django和flask版本的方法
May 14 Python
Python数据可视化库seaborn的使用总结
Jan 15 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Python常用外部指令执行代码实例
Nov 05 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 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取得字符串首字母的方法
2015/03/25 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
js post提交调用方法
2014/02/12 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
个人求职信范例
2014/01/29 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
母校寄语大全
2014/04/10 职场文书
作风建设演讲稿
2014/05/23 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
出国导师推荐信
2015/03/25 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技