接上文。
根据实验,微博对于同一IP/Cookiess连续爬取允许时间大约为5min,所以为了连续的爬取,拥有多个账号&代理&User_Agent 是十分必要的。
账号这个我不多说,淘宝几毛钱的事情,但实现自动登录获取Cookies这个我没有研究过,但跟今天我要说的没什么关系。
今天我要说的是在Scrapy中使用代理来访问微博进而进行爬取。
首先我们得找到一些免费可用的代理服务器。网上有很多Python自动获取代理的方法,我这里只做简单的实验,所以就直接在程序中写死。
这个网站很不错,推荐的那几个免费的基本都能用。我这里使用他的无密码代理。
下面进入正文。
Settings.py的配置
想要使用代理,我们必须打开Downloader的Middleware。
设置如下:
DOWNLOADER_MIDDLEWARES = {
'Spider.middlewares.Proxy_And_UsrAgent': 100,
}
由于只是使用代理,这使得我们的代码变得异常简单。
from Spider.settings import USER_AGENT
Proxy = [
'180.122.155.55:31104',#这个自己更换
]
class Proxy_And_UsrAgent(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
def process_request(self,request,spider):
request.headers.setdefault('User-Agent',random.choice(USER_AGENT))
request.meta['proxy'] = 'http://' + random.choice(Proxy)
USER_AGENT这个相信大家都不陌生,这个写在settings.py里面,充当User_Agent列表。
每次访问,我们随机的选择一个USER_AGENT,随机的选择一个代理(这个不太好,应该每个账户固定一个代理&一个Header,多账户同时爬取)
process_request(),每次提交一次request,request便会传入process_request这里,我们就是在这里实现添加代理&User_Agent的操作的。
的确很简单。