微信公众号文章爬虫,本地word文档保存

大家好,我是小焦。今天给大家来说一说微信公众号的爬虫,提起这个爬虫我也是一肚子气。为什么呢?本来计划好好的,要做几个功能的。结果人算不如天算,只能草草了事了。老马的反爬还是有点厉害的。最初的设想是爬到公众号的文章,然后找到我们需要的公众号,然后将里面的内容提取的。结果遇到反爬,换cookie,使用selenium都会被检测到。技术薄微,也只能暂时止步。

爬虫思路:

    起初,我是准备写一个类,完成爬取动作,后期进行调用的,结果发现没有函数好用,就进行了修改。整体流程就是利用搜狗微信的功能,来完成指定公众号的文章爬取。然后将文章链接保存到word文档中。

    在研究搜狗微信的过程中,发现了几个小毛病。搜狗微信就跟搜索引擎差不多,作者发表一篇文章,要隔断时间才会在它上面显示,有的快有的慢。包括微信客户端,手机上推文和电脑端的也有时间差,有的甚至一直没更新。这也是我放弃此爬虫的原因吧。好了不讲这些了,来看看下面的代码吧,作为小白,乱写一通,大神不喜勿喷啊。

准备工作:

  • python3
  • 调用的库:requests,urllib,pyquery,time,docx-python,datetime

    这几个库就不用多做解释了,会爬虫的小伙伴经常会用到。docx是word的库,pyquery是解析库,大伙都认识。下面是我写的代码,大家仅供参考吧。

# 2020年8月29日
# 本次目标利用搜狗微信网站,进行指定公众号文章最新内容爬取。


import requests
from urllib.parse import quote
from pyquery import PyQuery as pq
import time
from docx import Document
from datetime import datetime
import random

header = [
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400 QQBrowser',

]

#  该函数获取结果页面内容
def get_page(page,name):
    s = quote(name)
    headers = {
            'User-Agent':random.choice(header),
        }
    url = 'https://weixin.sogou.com/weixin?type=2&page={}&s_from=input&query={}&ie=utf8&_sug_=n&_sug_type_='.format(page,s)
    a = requests.get(url,headers=headers)

    return a.text

# 找出对应公众号的文章链接和标题,因为搜狗微信只显示前10页,所以我们也只抓取前10页,找出两天类的文章并输出
def get_article(name):
    for i in range(1,11):
        q = pq(get_page(i,name))
        lists = q('.news-list li').items()
        for list in lists:
            if list('.s-p a').text() == name:

                # 获取文章的时间戳
                t = list('.s-p').attr('t')
                # 这里是计算当前的时间戳
                shijian = int(time.time())

                # 这里是将两天内的文章搜索出来,并返回

                if (shijian - int(t)) < 172800:
                    title = list('.txt-box h3 a ').text()  # 获取文章标题
                    if title == '':
                        title = '无最新报价'
                    url = 'https://weixin.sogou.com' + list('.txt-box h3 a ').attr('href')  # 获取文章链接
                    if url == '':
                        url = ''

                    print(title,url)
                    return title,url


    # 上面函数已经拿到文章的名字和文章链接,现在来进行文章内容分析,(这块代码放弃了,因为公众号正文是反爬的加入cookie和selenium都会被劫住,所以暂时不搞这一块)
    # def get_content(self,title,url):
    #     brower = webdriver.Chrome()
    #
    #     time.sleep(2)
    #     print(url)
    #     brower.get(url)
    #     html = brower.page_source
    #     h = pq(html)
    #     print(h)
    #
    #     # lists = h('.rich_media_content p').items()
    #     # for list in lists:
    #     #
    #     #     print(list.text())


# 这里我们建立一个函数完成所有的文章标题链接写入到word文档中
lists = ['西安腾乐电子','西安新志电子']
def execute():
    # 创建一个空文档
    document = Document()
    #给文档添加一个标题,后面加上时间
    header = '公众号最新报价单({})'.format(datetime.now().strftime('%a,%b-%d %H:%M'))
    document.add_heading(header,level=0)
    for list in lists:
        print(list)
        time.sleep(3)
        title,url = get_article(list)
        if title == '':
            continue
        document.add_paragraph(title,style='List Number')
        document.add_paragraph('链接:' + url + '\n')
        document.add_paragraph('来自:' + list)

    document.save('最新报价.docx')



if __name__ == '__main__':
    execute()

源码地址:https://github.com/zhanjiuyou/weixin.git

    上述代码中,第一个函数是为了完成指定公众号的搜索后,返回结果页的代码。第二个函数是对搜索结果前十页进行遍历,找出和我们搜索名字一直的公众号内容。由于搜出来的结果非常乱,没有排序,我们利用时间戳将最近一天的内容输出。第三个函数则是用docx库将输出的内容保存到我们的word文档中。

    今天的内容就到这,代码很乱大伙自己看哦。不懂得方法进行资料查阅。最近小焦也在完成一个小小的爬虫项目。等完成之后再进行分享。更多内容关注我的公众号哦。合作请私聊。

喜欢(0)

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎访问的小伙伴! 希望在这里能帮到你。有问题请多多指教~ 点击联系站长
在线客服

在线客服

  • 扫描二维码,微信联系 扫描二维码,进群联系