一 修改代理池

1 将代理池中TEST_URL的地址修改为:TEST_URL = 'https://weixin.sogou.com/weixin?type=2&query=NBA'

2 运行代理池程序,运行结果如下:

这样数据库中留下100分的代理就是针对搜狗微信的可用代理了。

同时访问代理接口:http://127.0.0.1:5555/random

返回结果如下:

二 爬虫代码

from requests import Session

from weixin.config import *

from weixin.db import RedisQueue

from weixin.mysql import MySQL

from weixin.request import WeixinRequest

from urllib.parse import urlencode

import requests

from pyquery import PyQuery as pq

from requests import ReadTimeout, ConnectionError

class Spider():

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

keyword = 'NBA'

headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4,zh-TW;q=0.2,mt;q=0.2',

'Cache-Control': 'max-age=0',

'Connection': 'keep-alive',

'Cookie': 'IPLOC=CN1100; SUID=6FEDCF3C541C940A000000005968CF55; SUV=1500041046435211; ABTEST=0|1500041048|v1; SNUID=CEA85AE02A2F7E6EAFF9C1FE2ABEBE6F; weixinIndexVisited=1; JSESSIONID=aaar_m7LEIW-jg_gikPZv; ld=Wkllllllll2BzGMVlllllVOo8cUlllll5G@HbZllll9lllllRklll5@@@@@@@@@@; LSTMV=212%2C350; LCLKINT=4650; ppinf=5|1500042908|1501252508|dHJ1c3Q6MToxfGNsaWVudGlkOjQ6MjAxN3x1bmlxbmFtZTo1NDolRTUlQjQlOTQlRTUlQkElODYlRTYlODklOEQlRTQlQjglQTglRTklOUQlOTklRTglQTclODV8Y3J0OjEwOjE1MDAwNDI5MDh8cmVmbmljazo1NDolRTUlQjQlOTQlRTUlQkElODYlRTYlODklOEQlRTQlQjglQTglRTklOUQlOTklRTglQTclODV8dXNlcmlkOjQ0Om85dDJsdUJfZWVYOGRqSjRKN0xhNlBta0RJODRAd2VpeGluLnNvaHUuY29tfA; pprdig=ppyIobo4mP_ZElYXXmRTeo2q9iFgeoQ87PshihQfB2nvgsCz4FdOf-kirUuntLHKTQbgRuXdwQWT6qW-CY_ax5VDgDEdeZR7I2eIDprve43ou5ZvR0tDBlqrPNJvC0yGhQ2dZI3RqOQ3y1VialHsFnmTiHTv7TWxjliTSZJI_Bc; sgid=27-27790591-AVlo1pzPiad6EVQdGDbmwnvM; PHPSESSID=mkp3erf0uqe9ugjg8os7v1e957; SUIR=CEA85AE02A2F7E6EAFF9C1FE2ABEBE6F; sct=11; ppmdig=1500046378000000b7527c423df68abb627d67a0666fdcee; successCount=1|Fri, 14 Jul 2017 15:38:07 GMT',

'Host': 'weixin.sogou.com',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'

}

session = Session()

queue = RedisQueue()

mysql = MySQL()

def get_proxy(self):

"""

从代理池获取代理

:return:

"""

try:

response = requests.get(PROXY_POOL_URL)

if response.status_code == 200:

print('Get Proxy', response.text)

return response.text

return None

except requests.ConnectionError:

return None

def start(self):

"""

初始化工作

"""

# 全局更新Headers

self.session.headers.update(self.headers)

start_url = self.base_url + '?' + urlencode({'query': self.keyword, 'type': 2})

weixin_request = WeixinRequest(url=start_url, callback=self.parse_index, need_proxy=True)

# 调度第一个请求

self.queue.add(weixin_request)

def parse_index(self, response):

"""

解析索引页

:param response: 响应

:return: 新的响应

"""

doc = pq(response.text)

items = doc('.news-box .news-list li .txt-box h3 a').items()

for item in items:

url = item.attr('href')

weixin_request = WeixinRequest(url=url, callback=self.parse_detail)

yield weixin_request

next = doc('#sogou_next').attr('href')

if next:

url = self.base_url + str(next)

weixin_request = WeixinRequest(url=url, callback=self.parse_index, need_proxy=True)

yield weixin_request

def parse_detail(self, response):

"""

解析详情页

:param response: 响应

:return: 微信公众号文章

"""

doc = pq(response.text)

data = {

'title': doc('.rich_media_title').text(),

'content': doc('.rich_media_content').text(),

'nickname': doc('#js_profile_qrcode > div > strong').text(),

'wechat': doc('#js_profile_qrcode > div > p:nth-child(3) > span').text()

}

yield data

def request(self, weixin_request):

"""

执行请求

:param weixin_request: 请求

:return: 响应

"""

try:

if weixin_request.need_proxy:

proxy = self.get_proxy()

if proxy:

proxies = {

'http': 'http://' + proxy,

'https': 'https://' + proxy

}

return self.session.send(weixin_request.prepare(),

timeout=weixin_request.timeout, allow_redirects=False, proxies=proxies)

return self.session.send(weixin_request.prepare(), timeout=weixin_request.timeout, allow_redirects=False)

except (ConnectionError, ReadTimeout) as e:

print(e.args)

return False

def error(self, weixin_request):

"""

错误处理

:param weixin_request: 请求

:return:

"""

weixin_request.fail_time = weixin_request.fail_time + 1

print('Request Failed', weixin_request.fail_time, 'Times', weixin_request.url)

if weixin_request.fail_time < MAX_FAILED_TIME:

self.queue.add(weixin_request)

def schedule(self):

"""

调度请求

:return:

"""

while not self.queue.empty():

weixin_request = self.queue.pop()

callback = weixin_request.callback

print('Schedule', weixin_request.url)

response = self.request(weixin_request)

if response and response.status_code in VALID_STATUSES:

results = list(callback(response))

if results:

for result in results:

print('New Result', type(result))

if isinstance(result, WeixinRequest):

self.queue.add(result)

if isinstance(result, dict):

self.mysql.insert('articles', result)

else:

self.error(weixin_request)

else:

self.error(weixin_request)

def run(self):

"""

入口

:return:

"""

self.start()

self.schedule()

if __name__ == '__main__':

spider = Spider()

spider.run()

三 数据库

1 程序

import pymysql

from weixin.config import *

class MySQL():

def __init__(self, host=MYSQL_HOST, username=MYSQL_USER, password=MYSQL_PASSWORD, port=MYSQL_PORT,

database=MYSQL_DATABASE):

"""

MySQL初始化

:param host:

:param username:

:param password:

:param port:

:param database:

"""

try:

self.db = pymysql.connect(host, username, password, database, charset='utf8', port=port)

self.cursor = self.db.cursor()

except pymysql.MySQLError as e:

print(e.args)

def insert(self, table, data):

"""

插入数据

:param table:

:param data:

:return:

"""

keys = ', '.join(data.keys())

values = ', '.join(['%s'] * len(data))

sql_query = 'insert into %s (%s) values (%s)' % (table, keys, values)

try:

self.cursor.execute(sql_query, tuple(data.values()))

self.db.commit()

except pymysql.MySQLError as e:

print(e.args)

self.db.rollback()

2 数据表脚本

CREATE TABLE `articles` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(255) DEFAULT NULL,

`content` text,

`wechat` varchar(255) DEFAULT NULL,

`nickname` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=151 DEFAULT CHARSET=utf8;

使用代理爬去微信公众号_爬虫之使用代理爬取微信公众号文章(下)相关推荐

  1. python爬去百度百科词条_Python爬虫入门学习实践——爬取小说

    本学期开始接触python,python是一种面向对象的.解释型的.通用的.开源的脚本编程语言,我觉得python最大的优点就是简单易用,学习起来比较上手,对代码格式的要求没有那么严格,这种风格使得我 ...

  2. 网页爬虫使用代理IP的几种方案,爬虫如何设置代理?

    不少网络公司在进行爬虫数据业务的时候,都会选择代理IP,网页爬虫在现如今非常常见,尤其是一些大数据处理公司,都会使用爬虫的方式来进行信息的抓取,而要想进行信息的精准抓取,那就必须使用靠谱且稳定的代理I ...

  3. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章

    下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...

  4. python爬取微信聊天记录数据_[使用案例]python如何爬取微信好友信息?(上)

    Python3如何爬取微信好友基本信息,并且进行数据清洗?下面跟着IP海带来的教程,我们一起看看具体的操作要怎么实现. 1.登录获取好友基础信息: 好友的获取方法为get_friends,将会返回完整 ...

  5. python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...

    初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 import itchat im ...

  6. 爬去豆瓣IP被封,用IP代理解决

    import requests import random #用不同IP去访问要爬去的网站 #在https://proxy.coderbusy.com/找到的IP地址(不停刷新即可) pro=['12 ...

  7. java 关注公众号_推荐10个值得关注的技术公众号

    原标题:推荐10个值得关注的技术公众号 今天推荐一些行业内优质的技术公众号,这些号的主人在技术圈深耕多年,关注这些技术号可以让系统了解学习他们分享的技术经验,让我们的技术提升事半功倍. 程序员内推圈 ...

  8. python爬虫常见反爬措施_爬虫常见的反爬措施有哪些

    爬虫常见的反爬措施有三种: 1.header头部信息 解决方法: 加User-Agent值: 如果不加header头,部分网站服务器判断不到用户的访问来源,所以会返回一个404错误来告知你是一个爬虫, ...

  9. python 爬带端口的网站_程序员带你爬取爬虫最爱扒的网站数据。快来看!

    无私分享全套Python爬虫干货,如果你也想学习Python,@ 私信小编获取 先问三个问题: 1.你以为你在大众点评上找到的馆子,真的是几百个人给了好评,然后才出现在你的推荐里的吗? 2.你以为你在 ...

最新文章

  1. 如何用极致业务基础平台做一个通用企业ERP系列之三启用期间管理设计
  2. C++ 值传递、指针传递、引用传递
  3. 数据库性能优化—MySQL单表最大记录数超过多少时性能会严重下降
  4. tomcat java环境配置
  5. python读取xlsx文件年月日变成数字_python转化excel数字日期为标准日期操作
  6. Ubuntu apt-get方式安装Subversion
  7. Redis学习总结(7)——怎么保持缓存与数据库一致性?
  8. 设计模式 经典书籍必备推荐
  9. Starling Feathers:Starling专属UI框架
  10. 关于ultrawebgrid的列的样式
  11. HBase 实战(1)--HBase的数据导入方式
  12. [转]Windows server 2008网络负载均衡集群
  13. 分布式系统架构网络之IDC机房
  14. URL中 # ? 是什么意思
  15. mysql 错误代码1130_mysql出现错误码1130怎么办
  16. Python安装教程_Python运行环境的搭建
  17. 【数智化人物展】网智天元莫倩:“感、联、知、控”,四步方可打造企业数智化转型升级路径...
  18. 运筹说 第5期 | 运筹学江湖的形成
  19. Nginx添加腾讯安全HTTPS证书
  20. 微信小程序导航头部吸顶效果

热门文章

  1. 75亿“迎娶”ZeniMax,钟情游戏的微软在坚持什么?
  2. 最适合程序员编程的10款字体
  3. .Net Core中间件
  4. html 静止横屏,CSS实现Html页面强制横屏
  5. 国产芯片WiFi物联网智能插座—项目简介
  6. 总结后软件开发项目基本流程-先流程图-后描述人员分工和具体工作-自己备学
  7. 2021年中国萤石发展现状及进出口状况分析:下游氢氟酸景气助力萤石价格保持高位 [图]
  8. python websockets 全双工通信
  9. 【C语言】可变参数列表
  10. 关于APP在小米5s第一次安装启动后,点击home返回桌面,再次进入重进闪屏页问题...