您的位置:首页 > 编程语言 > Python开发

python3爬虫用代理池爬虫搜狗微信文章

2018-12-09 19:38 477 查看

本文是通过搜狗微信,爬取有关python相关文章的标题,正文内容,公众号,发表日期等信息,把获取到的信息保存到mongodb中,因为需要用到代理池,所有需要先配置好代理池,代理词github地址:https://github.com/germey/proxypool ,安装方法参考里面的说明就行,此外需要安装好mongodb数据库和pymongo库,开发使用的是pycharm。
一,准备工作
首先新建一个项目名为weixinspider,在项目下面新建weinxin.py文件,然后打开搜狗微信页面,输入python,打开第一页,按f12查看页面结构:


可以看到请求的方式是get方法,请求的url是带参数的,把页面向下拉可以看到具体的参数信息,可以在爬虫中构造这些参数

构造的paramdata参数如下:

paramdata={
'type': '2',
'query': 'python',
'ie': 'utf8',
's_from': 'input',
'_sug_': 'y',
'_sug_type_':''
}

设置了paramdata后,我们请求的初始url就为:

base_url = 'http://weixin.sogou.com/weixin?'

由于微信没有登录只能看前10页,所有需要先登录一下,把获取的cookie写到请求头中,为了反爬虫,可以同时把Host,User-Agent等信息加上,如下:

headers ={
'Cookie': 'IPLOC=CN4201; SUID=2A429A753220910A000000005BEC2390; SUV=007A4CCC759A422A5BEC239185C1D647; pgv_pvi=6164456448; ld=5lllllllll2bEjnylllllVsdvW1lllllNBIj3kllll9lllllpZlll5@@@@@@@@@@; ABTEST=0|1543496174|v1; weixinIndexVisited=1; ppinf=5|1543583208|1544792808|dHJ1c3Q6MToxfGNsaWVudGlkOjQ6MjAxN3x1bmlxbmFtZToxODolRTUlQTQlOUMlRTYlQUQlOEN8Y3J0OjEwOjE1NDM1ODMyMDh8cmVmbmljazoxODolRTUlQTQlOUMlRTYlQUQlOEN8dXNlcmlkOjQ0Om85dDJsdUI4UHNrU25nSUZOSGh6RG95Qkl0WEFAd2VpeGluLnNvaHUuY29tfA; pprdig=MtSPg_Eje6Cgb3JZqqDWLRy3lxOkHyLx_RoxWzOuBaVPg9C9kx4MPPakrIncLKGQA4BydsB3k6UAnJdNz7L3soGJiqPzIwwx2Zgf-zq0GYC00hYz1L4cTewogFIss5Rkii5lnmY5CCfy8Gk-XM7lGXI4wPmdzjoS4fGdkDpfSu4; sgid=13-38142775-AVwBNegDtycQwSs9XVbmdNk; SUIR=D6845DB2C7C2BC6D69802225C8EB01AD; sct=6; SNUID=96753AD6A3A6DEE001DAB282A3179DC5; ppmdig=15440048300000001461f6ae4514423e04bac29b5ee8630b; JSESSIONID=aaaQUHCMr3KLgcywKP6Cw',
'Host': 'weixin.sogou.com',
'Referer': 'https://weixin.sogou.com/',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'

配置好代理池,可以通过api获取到;

PROXY_POOL_URL = 'http://127.0.0.1:5000/get'
def get_proxy():
try:
response = requests.get(PROXY_POOL_URL)
if response.status_code == 200:
return response.text
return None
except ConnectionError:
return None

使用代理

proxy = get_proxy()
print('using proxy :{}'.format(proxy))
proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy
}
data = urlencode(data)
url = base_url + data
try:
request =requests.get(url=url,headers=headers,proxies=proxies
if request.status_code==200:
html=etree.HTML(request.content)
article_urls=html.xpath('//div[@class="txt-box"]/h3/a/@href')
else:
print('Error')
except:
print('error')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: