相关github地址:https://github.com/KaguraTyan/web_crawler
一般做爬虫爬取网站时,首选的都是m站,其次是wap站,最后考虑PC站,因为PC站的各种验证最多。当然,这不是绝对的,有的时候PC站的信息最全,而你又恰好需要全部的信息,那么PC站是你的首选。一般m站都以m开头后接域名, 我们这次通过m.weibo.cn去分析微博的HTTP请求。
准备工作
1、环境配置
- python 3
- win10
- chrome
- urllib
- json
- xlwt
- time
- os
2、代理ip
使用代理ip爬虫是反爬虫手段之一,很多网站会检测某一时间段内某个ip的访问次数,访问次数过多,就会禁止该ip访问(比如防刷票)。所以爬虫时可以设置多个代理,隔一段时间换一个,及时其中一个被封,也可调用其他ip进行完成爬虫任务。在urllib.request库中,通过ProxyHandler来设置使用代理服务器。网上有很多免费代理ip池,如西刺免费代理IPhttp://www.xicidaili.com,根据需要选择。但是一般这种仅适合个人爬虫需求,因为很多免费代理ip可能同时被很多人使用,可使用时间短,速度慢,匿名度不高,所以专业的爬虫工程师或爬虫公司需要使用更高质量的私密代理,通常这种代理需要找专门的供应商购买,再通过用户名/密码授权使用。
单个代理ip调用
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import urllib.request
import random
url = "https://www.douban.com/"
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"}
# 构建了两个代理Handler,一个有代理IP,一个没有代理IP
httpproxy_handler = urllib.request.ProxyHandler({"http": "61.135.217.7:80"})
nullproxy_handler = urllib.request.ProxyHandler({})
proxySwitch = True # 定义一个代理开关
# 通过 urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
# 根据代理开关是否打开,使用不同的代理模式
if proxySwitch:
opener = urllib.request.build_opener(httpproxy_handler)
else:
opener = urllib.request.build_opener(nullproxy_handler)
request = urllib.request.Request(url, headers=header)
# 方法1、只有使用opener.open()方法发送请求才使用自定义的代理,而使用urlopen()函数则不使用自定义代理。
response = opener.open(request)
# 方法2、urllib.request.install_opener(opener)函数就是将opener应用到全局,之后所有的,
# 不管是opener.open()还是urlopen() 发送请求,都将使用自