这里使用搜狗接口来爬取微信公众号,

使用的代理池是以前使用redis和flask一起来维护的,在网上爬取的免费代理(想要详细了解的可以到前面文章了解)

主文件代码如下,尽量写了备注

from urllib.parse import urlencode

import pymongo
import requests
from lxml.etree import XMLSyntaxError
from requests.exceptions import ConnectionError
from pyquery import PyQuery as pq
from config import *

# 连接数据库
client = pymongo.MongoClient(MONGO_URI)
db = client[MONGO_DB]

# 爬取的url部分
base_url = 'http://weixin.sogou.com/weixin?'

# 请求头文件 需要带上头cookie,不然只能访问10页信息
headers = {
    'Cookie': 'SUID=F6177C7B3220910A000000058E4D679; SUV=1491392122762346; ABTEST=1|1491392129|v1; SNUID=0DED8681FBFEB69230E6BF3DFB2F8D6B; ld=OZllllllll2Yi2balllllV06C77lllllWTZgdkllll9lllllxv7ll5@@@@@@@@@@; LSTMV=189%2C31; LCLKINT=1805; weixinIndexVisited=1; SUIR=0DED8681FBFEB69230E6BF3DFB2F8D6B; JSESSIONID=aaa-BcHIDk9xYdr4odFSv; PHPSESSID=afohijek3ju93ab6l0eqeph902; sct=21; IPLOC=CN; ppinf=5|1491580643|1492790243|dHJ1c3Q6MToxfGNsaWVudGlkOjQ6MjAxN3x1bmlxbmFtZToyNzolRTUlQjQlOTQlRTUlQkElODYlRTYlODklOER8Y3J0OjEwOjE0OTE1ODA2NDN8cmVmbmljazoyNzolRTUlQjQlOTQlRTUlQkElODYlRTYlODklOER8dXNlcmlkOjQ0Om85dDJsdUJfZWVYOGRqSjRKN0xhNlBta0RJODRAd2VpeGluLnNvaHUuY29tfA; pprdig=j7ojfJRegMrYrl96LmzUhNq-RujAWyuXT_H3xZba8nNtaj7NKA5d0ORq-yoqedkBg4USxLzmbUMnIVsCUjFciRnHDPJ6TyNrurEdWT_LvHsQIKkygfLJH-U2MJvhwtHuW09enCEzcDAA_GdjwX6_-_fqTJuv9w9Gsw4rF9xfGf4; sgid=; ppmdig=1491580643000000d6ae8b0ebe76bbd1844c993d1ff47cea',
    '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/57.0.2987.133 Safari/537.36'
}
# 最开始是否启用ip代理
proxy = None

def get_proxy():
    # 代理获取函数,这里使用类flask的接口
    try:
        response = requests.get(PROXY_POOL_URL)
        if response.status_code == 200:
            return response.text
        # 没有异常直接结束
        return None
    except ConnectionError:
        return None

def get_html(url, count=1):
    print('Crawling', url)
    print('Trying Count', count)
    global proxy
    # 设置访问深度
    if count >= MAX_COUNT:
        print('Tried Too Many Counts')
        return None
    try:
        # 如果启用和有代理
        if proxy:
            # 在代理池中的都是没有加头的代理,在这里加上去
            proxies = {
                'http': 'http://' + proxy
            }
            # 需要设置好 allow_redirects=False 因为requests 带有自动处理异常 加上代理
            response = requests.get(url, allow_redirects=False, headers=headers, proxies=proxies)
        else:
            response = requests.get(url, allow_redirects=False, headers=headers)

# 如果请求成功返回
        if response.status_code == 200:
            return response.text
        if response.status_code == 302:
            # Need Proxy
            # 出现异常说明代理已经不可用,或用的人太多,这里我们就跟换代理

print('302')
            # 调用代理获取函数,获取一个代理
            proxy = get_proxy()

if proxy:
                # 获取到代理ip重新获取网页
                print('Using Proxy', proxy)
                return get_html(url)
            else:
                print('Get Proxy Failed')
                # 没有代理了,直接退出
                return None
    except ConnectionError as e:
        print('Error Occurred', e.args)
        proxy = get_proxy()
        count += 1
        return get_html(url, count)

def get_index(keyword, page):
    #  url后半部分信息
    data = {
        'query': keyword,
        'type': 2,
        'page': page
    }
    # 转码
    queries = urlencode(data)
    url = base_url + queries
    html = get_html(url)
    return html

def parse_index(html):
    # pyquery或取文件
    doc = pq(html)
    items = doc('.news-box .news-list li .txt-box h3 a').items()
    for item in items:
        yield item.attr('href')

def get_detail(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except ConnectionError:
        return None

def parse_detail(html):
    try:
        doc = pq(html)
        title = doc('.rich_media_title').text()
        content = doc('.rich_media_content').text()
        date = doc('#post-date').text()
        nickname = doc('#js_profile_qrcode > div > strong').text()
        wechat = doc('#js_profile_qrcode > div > p:nth-child(3) > span').text()
        return {
            'title': title,
            'content': content,
            'date': date,
            'nickname': nickname,
            'wechat': wechat
        }
    except XMLSyntaxError:
        return None

def save_to_mongo(data):
    # 去重处理并存mongodb数据库
    if db['fenjin'].update({'title': data['title']}, {'$set': data}, True):
        print('Saved to Mongo', data['title'])
    else:
        print('Saved to Mongo Failed', data['title'])

def main():
    # 设置访问的页数和次数
    for page in range(11, 15):
        # 传入访问的关键字
        html = get_index(KEYWORD, page)
        # 获取到html文件,获取链接
        if html:
            article_urls = parse_index(html)
            for article_url in article_urls:
                article_html = get_detail(article_url)
                if article_html:
                    # 解析文章内容
                    article_data = parse_detail(article_html)
                    print(article_data)
                    # 功德圆满,村数据库
                    if article_data:
                        save_to_mongo(article_data)

if __name__ == '__main__':

main()

设置代码如下,

PROXY_POOL_URL = 'http://127.0.0.1:5000/get'
KEYWORD = '风景'
MONGO_URI = 'localhost'
MONGO_DB = 'weixin'
MAX_COUNT = 5

使用搜狗接口爬取微信公众号相关推荐

  1. Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息

    少年最好的地方就是:虽然嘴上说要放弃,心底却总会憋着一口气.--刘同 文章目录 一.需求和网页分析 二.selenium爬虫 一.需求和网页分析 URL:https://weixin.sogou.co ...

  2. 从搜狗网站爬取微信公众号文章

    转自:http://blog.csdn.net/mr_guo_lei/article/details/78570744 1.模拟浏览器登陆,获取cookies 2.request.get()带上coo ...

  3. 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台)

    首先表示抱歉,年底大家都懂的,又涉及SupportYun系统V1.0上线.故而第四篇文章来的有点晚了些~~~对关注的朋友说声sorry! SupportYun系统当前一览: 首先说一下,文章的进度一直 ...

  4. 记一次企业级爬虫系统升级改造(四):爬取微信公众号文章(通过搜狗与新榜等第三方平台)...

    首先表示抱歉,年底大家都懂的,又涉及SupportYun系统V1.0上线.故而第四篇文章来的有点晚了些~~~对关注的朋友说声sorry! SupportYun系统当前一览: 首先说一下,文章的进度一直 ...

  5. 基于搜狗微信爬取微信公众号的文章

    1. 引入模块和函数 from requests_html import HTMLSession from urllib.parse import urlparse, parse_qs import ...

  6. Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章

    前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  7. python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  8. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  9. 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...

    9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 1. 本节目标 我们的主要目标是利用代理爬取微信公众号 ...

  10. python爬取微信公众号文章(包含文章内容和图片)

    之前虽然做过网页爬取,但微信爬取一直没做过,因为我一直不知道网页可以进微信公众平台,只用过微信客户端进微信公众号.既然可以通过网页进微信公众平台,那么爬取微信公众号文章就流程上就没太多难度了. 自己在 ...

最新文章

  1. C#中的浅拷贝和深拷贝
  2. IP phone配製學習
  3. Matlab图像剪切,超出图像区域指定颜色填充
  4. linux安装软件报错:有未能满足的依赖关系
  5. Arrays 的copyOf() - JDK 6 和操作符 instanceof
  6. Python基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
  7. 使用序列化查找对象中的脏字段
  8. 要闻君说:FaceTime的服务究竟坑有多大?CNCF 技术监督委员会首添中国面孔,来自阿里!高通华为暂和解……...
  9. fatal error: openssl/evp.h: 没有那个文件或目录
  10. 2018java计算机二级考试试题和答案,2018年计算机等级考试二级JAVA习题答案(1)
  11. Tomas Mikolov's Recurrent Neural Networks Language Modeling Toolkit
  12. 测试回归结果分析软件,“3414”试验数据分析软件设计原理
  13. 中学数学建模书籍及相关的视频等(2022.08.09)
  14. sin傅里叶变换公式_傅里叶变换公式(傅里叶变换常用公式)
  15. 在MySQL数据库中进行模糊查询_数据库模糊查询
  16. C#与三菱FX5U PLC以太网通讯
  17. Java 亚马逊Amazon spapi对接开发,java Sdk,授权和接口访问步骤详细说明
  18. java 传感器_JAVA串口采集传感器数据
  19. 微信屏蔽网页的依据是什么?
  20. 服务器性能计数器驱动没装上,安装和删除 AD DS 的已知问题

热门文章

  1. python第六周拼图_python – 解决n-queen拼图
  2. 想成为一名黑客怎么办?
  3. C++ 工厂模式(Factory 模式)简介与实现
  4. 基础拍摄前期和基础后期修图
  5. 知乎上的那些神回复,已笑趴~~~
  6. H5在微信端自动播放音乐
  7. python实现txt文本文档批量转为可编辑的pdf文档
  8. 上传应用到苹果一直卡住验证中(authentication with the app store)问题解决
  9. python简单实现天猫手机评论标签提取--自然语言处理
  10. [NOIP 2018]龙虎斗 题解(Python)