python爬虫如何抓取代理服务器

一年前突然有个灵感,想搞个强大的网盘搜索引擎,但由于大学本科学习软件工程偏嵌入式方向,web方面的能力有点弱,不会jsp,不懂html,好久没有玩过sql,但就是趁着年轻人的这股不妥协的劲儿,硬是把以前没有学习的全部给学了一遍,现在感觉web原来也就那么回事。好了,废话就不说了,看到本文的读者,可以先看看我做的东西:

去转盘网:www.quzhuanpan.com

ok搜搜:www.oksousou.com(这个是磁力,顺便拿出来给大伙观赏)

言归正传,由于我要爬取百度网盘,而度娘你懂的的搞爬虫出生的,反爬虫的能力很牛掰。尤其像我用我的电脑去爬百度网盘,爬几天百度就盯上了我的机子,爬虫开始爬不出东西。之后网上东查,西查,发现可以通过代理来解决这个问题,所以又去爬代理。我爬的是这个网站:

http://www.xicidaili.com/ 之后他貌似他开始反击,我又将魔爪指向了:http://www.kuaidaili.com。

想必看这篇博文的多半是程序猿,所以还是先上代码(我会写注释的,放心,该爬虫以http://www.xicidaili.com/为目标):

#coding:utf-8

import json

import sys

import urllib, urllib2

import datetime

import time

reload(sys)

sys.setdefaultencoding(‘utf-8‘)

from Queue import Queue

from bs4 import BeautifulSoup

import MySQLdb as mdb

DB_HOST = ‘127.0.0.1‘

DB_USER = ‘root‘

DB_PASS = ‘root‘

ID=0

ST=1000

uk=‘3758096603‘

classify="inha"

proxy = {u‘https‘:u‘118.99.66.106:8080‘}

class ProxyServer:

def __init__(self): #这个就不说了,数据库初始化,我用的是mysql

self.dbconn = mdb.connect(DB_HOST, DB_USER, DB_PASS, ‘ebook‘, charset=‘utf8‘)

self.dbconn.autocommit(False)

self.next_proxy_set = set()

self.chance=0

self.fail=0

self.count_errno=0

self.dbcurr = self.dbconn.cursor()

self.dbcurr.execute(‘SET NAMES utf8‘)

def get_prxy(self,num): #这个函数用来爬取代理

while num>0:

global proxy,ID,uk,classify,ST

count=0

for page in range(1,718): #代理网站总页数,我给了个718页

if self.chance >0: #羊毛出在羊身上,如过爬取网站开始反击我,我就从他那爬下来的

代理伪装,这个self.chance表示我什么时候开始换代理

if ST % 100==0:

self.dbcurr.execute("select count(*) from proxy")

for r in self.dbcurr:

count=r[0]

if ST>count:

ST=1000 #我是从数据库的第1000条开始换的,这段你可以改,搞个随机函数随机换,我写的很简单

self.dbcurr.execute("select * from proxy where ID=%s",(ST))

results = self.dbcurr.fetchall()

for r in results:

protocol=r[1]

ip=r[2]

port=r[3]

pro=(protocol,ip+":"+port)

if pro not in self.next_proxy_set:

self.next_proxy_set.add(pro)

self.chance=0

ST+=1

proxy_support = urllib2.ProxyHandler(proxy) #注册代理

# opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler(debuglevel=1))

opener = urllib2.build_opener(proxy_support)

urllib2.install_opener(opener)

#添加头信息,模仿浏览器抓取网页,对付返回403禁止访问的问题

# i_headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘}

i_headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.48‘}

#url=‘http://www.kuaidaili.com/free/inha/‘ + str(page)

url=‘http://www.kuaidaili.com/free/‘+classify+‘/‘ + str(page)

html_doc=""

try:

req = urllib2.Request(url,headers=i_headers)

response = urllib2.urlopen(req, None,5)

html_doc = response.read() #这不就获取了要爬取的页面嘛?

except Exception as ex: #看抛出异常了,可能开始反击我,我开始换代理

print "ex=",ex

pass

self.chance+=1

if self.chance>0:

if len(self.next_proxy_set)>0:

protocol,socket=self.next_proxy_set.pop()

proxy= {protocol:socket}

print "proxy",proxy

print "change proxy success."

continue

#html_doc = urllib2.urlopen(‘http://www.xici.net.co/nn/‘ + str(page)).read()

if html_doc !="": #解析爬取的页面,用的beautifulSoup

soup = BeautifulSoup(html_doc,from_encoding="utf8")

#print "soup",soup

#trs = soup.find(‘table‘, id=‘ip_list‘).find_all(‘tr‘) #获得所有行

trs = ""

try:

trs = soup.find(‘table‘).find_all(‘tr‘)

except:

print "error"

continue

for tr in trs[1:]:

tds = tr.find_all(‘td‘)

ip = tds[0].text.strip() #ip

port = tds[1].text.strip() #端口

protocol = tds[3].text.strip()

#tds = tr.find_all(‘td‘)

#ip = tds[2].text.strip()

#port = tds[3].text.strip()

#protocol = tds[6].text.strip()

get_time= tds[6].text.strip()

#get_time = "20"+get_time

check_time = datetime.datetime.strptime(get_time,‘%Y-%m-%d %H:%M:%S‘)

temp = time.time()

x = time.localtime(float(temp))

time_now = time.strftime("%Y-%m-%d %H:%M:%S",x) # get time now,入库时间

http_ip = protocol+‘://‘+ip+‘:‘+port

if protocol == ‘HTTP‘ or protocol == ‘HTTPS‘: #只要http协议相关代理,其他一律不要

content=""

try: #我就是不放心这个网站,所以爬下来后我又开始检测代理是否真的有效

proxy_support=urllib2.ProxyHandler({protocol:http_ip})

# proxy_support = urllib2.ProxyHandler({‘http‘:‘http://124.200.100.50:8080‘})

opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)

urllib2.install_opener(opener)

if self.count_errno>50:

self.dbcurr.execute("select UID from visited where ID=%s",(ID)) #这是我的数据库,我取了一个叫uk的东东,这个

你不用管,你想检测拿你要爬取的链接检测代理吧

for uid in self.dbcurr:

uk=str(uid[0])

ID+=1

if ID>50000:

ID=0

self.count_errno=0

test_url="http://yun.baidu.com/pcloud/friend/getfanslist?start=0&query_uk="+uk+"&limit=24" #我用来检测的链接

print "download:",http_ip+">>"+uk

req1 = urllib2.Request(test_url,headers=i_headers)

response1 = urllib2.urlopen(req1, None,5)

content = response1.read()

except Exception as ex: #抛异常后的处理

#print "ex2=",ex

pass

self.fail+=1

if self.fail>10:

self.fail=0

break

continue

if content!="":

json_body = json.loads(content)

errno = json_body[‘errno‘]

self.count_errno+=1

if errno!=-55: #检验该代理是有用的,因为content!="" 并且度娘返回not -55

print "success."

self.dbcurr.execute(‘select ID from proxy where IP=%s‘, (ip)) #开始入库了

y = self.dbcurr.fetchone()

if not y:

print ‘add‘,‘%s//:%s:%s‘ % (protocol, ip, port)

self.dbcurr.execute(‘INSERT INTO proxy(PROTOCOL,IP,PORT,CHECK_TIME,ACQ_TIME) VALUES(%s,%s,%s,%s,%s)‘,(protocol,ip,port,check_time,time_now))

self.dbconn.commit()

num-=1

if num % 4 ==0:

classify="intr" #这个是原来网站的那几个标签栏名称,我是一栏一栏的爬取的

if num % 4 ==1:

classify="outha"

if num % 4 ==2:

classify="outtr"

if num % 4 ==3:

classify="inha"

if __name__ == ‘__main__‘:

proSer = ProxyServer()

proSer.get_prxy(10000) #爬10000次,单线程,爬个1两周没有问题

以上就是本人的代理爬虫代码,有兴趣可以加我qq:3047689758,还可以去:www.quzhuanpan.com首页关注我们的微博(如果你没有看到微博,可能是新代码我没有推),谢谢阅读,欢迎转载。

				
时间: 2024-10-17 06:03:32

python爬虫如何抓取代理服务器的相关文章

Python爬虫实战---抓取图书馆借阅信息

原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约,影响日后借书,而自己又懒得总是登录到学校图书馆借阅系统查看,于是就打算写一个爬虫来抓取自己的借阅信息,把每本书的应还日期给爬下来,并写入txt文件,这样每次忘了就可以打开该txt文件查看,每次借阅信息改变了,只要再重新运行一遍该程序,原txt文件就会被新文件覆盖,里面的内容得到更新. 用到的技术: Python版本是 2.7 ,同时用到了ur

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿"德州扒鸡"做为参考目标吧~!如果想抓其他商品的话,自行更换目标即可!打开淘宝,搜索目标,随便点击一个商品进入,在点击累计评论,打开F12开发者工具--网络,先清除现有的所有内容,然后点击下一页评论,在弹出的内容中查找文件中开头为list_detail_rate.htm的html类型,如下图所示 这个html中就含

Python爬虫实现抓取腾讯视频所有电影【实战必学】

2019-06-27 23:51:51 阅读数 407  收藏 更多 分类专栏: python爬虫 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者: Python新手学习之家 用python实现的抓取腾讯视频所有电影的爬虫 # -*- coding: utf-8 -*-   import re   import urllib2   from bs4 import BeautifulSoup   import stri

Python爬虫实现抓取网页图片

在逛贴吧的时候看见贴吧里面漂亮的图片,或有漂亮妹纸的图片,是不是想保存下来? 但是有的网页的图片比较多,一个个保存下来比较麻烦. 最近在学Python,所以用Python来抓取网页内容还是比较方便的: 所以就尝试了一下 ------code------- #coding=utf-8 import re    import urllib   //导入模块     def gethtml(url):   //自定义函数,传参获取网页内容    page=urllib.urlopen(url)    

python爬虫数据抓取

概要:利用python进行web数据抓取简单方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返回的内容. 一.第一种方法通常用来获取静态页面内容,比如豆瓣电影内容分类下动画对应的链接: http://www.douban.com/tag/%E5%8A%A8%E7%94%BB/?focus=movie     纪录片对应的链接: http://www.douban.com/tag/%E7%

Python爬虫:抓取手机APP的数据

摘要: 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1.抓取APP数据包 方法详细可以参考这篇博文:http://my.oschina.net/jhao104/blog/605963 得到超级课程表登录的地址:http://120.55.151.61/V2/StudentSkip/loginCheckV4.action 表单: 表单中包括了用户名和密码,当然都是加密过了的,还有一个设备信息,直接post过去就是.

Python爬虫之抓取豆瓣影评数据

脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息写入excel中 页面信息如下: 一共5页,需要循环访问不同的页面 HTML源代码: <a class="" title="<权力的游戏>S5E8:凛冬已至,凡人皆死" href="http://movie.douban.com/review

python爬虫:抓取新浪新闻内容(从当前时间到之前某个时间段),并用jieba分词,用于训练自己的分词模型

新浪新闻内容采用的是ajax动态显示内容,通过抓包,发现如下规律: 每次请求下一页,js那一栏都会出现新的url: "http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1" "||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&ta

python爬虫 之 抓取高清图片

这个网站http://www.hbc333.com/是一个壁纸图片网站,提供各种分辨率的图片的下载,因此想写一个爬虫脚本批量下载这些图片. 经观察,2560*1600分辨率的图片的网址格式为:http://www.hbc333.com/size/2560x1600/n/ (n是页数), 每张预览图片的地址是:/data/out/253/46659416-watch-dogs-wallpaper.jpg, 而原图的链接则为:http://www.hbc333.com/data/out/253/46