python爬虫如何爬取微信公众号文章(二)

python爬虫如何爬取微信公众号文章

爬虫如何爬取微信公众号文章这篇文章中介绍了如何获取公众号的所有历史文章的链接,并保存在了csv文件中,接下来介绍如何通过这些url地址爬取每篇文章,并通过xpath和正则表达式提取出一些重要的数据,把数据保存到数据库并把整个页面保存起来。

1.首先定义一个类,并定义一些超参数,这里只用到了User_Agent:

class WeixinSpider_1:
    def __init__(self):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"}

2.读取文件,把每篇文章的url地址和发布时间传入到两个列表中:

    def get_url_list(self):
        file_path = "url/beijing.csv"
        df = pd.read_csv(file_path)
        url_list = df["link"].tolist()
        time_list = df["create_time"].tolist()  

        return url_list, time_list

tolist()方法是将pandas中的Series类型的数据转换成list类型。返回两个列表,url列表和发布时间列表。

3.解析url地址,发送请求获得响应,返回页面源码

    def parse_url(self, url):  
        response = requests.get(url, headers=self.headers)
        return response.content.decode()

这里要介绍一下str和bytes两种数据类型,bytes是二进制类型,互联网上的数据都是以二进制的方式传输的。
str是unicode的呈现形式,unicode是字符集。
字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等
UTF-8是Unicode的实现方式之一,UTF-8是一种变长的编码方式,可以是1,2,3个字节。
网页上的是bytes类型数据,所以需要转换成str类型。
str 使用encode方法转化为 bytes
bytes通过decode转化为str。

为什么要用request而不是urllib呢?

  1. requests的底层实现就是urllib
  2. requests在python2 和python3中通用,方法完全一样
  3. requests简单易用
  4. Requests能够自动帮助我们解压(gzip压缩的等)网页内容

response的常用方法:

  1. response.text
  2. respones.content
  3. response.status_code
  4. response.request.headers
  5. response.headers

response.text 和response.content比较

类型解码类型修改编码方式
response.textstr根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码response.encoding=”gbk”
response.contentbytes没有指定response.content.deocde(“utf8”)

4.分析页面,提取数据
使用xpath取出文章的标题,公众号的名称和文章文本内容,然后返回一个字典列表。

    def get_content_list(self, html_str):  # 提取数据
        html = etree.HTML(html_str)
        content_list = []
        item = {}
        item["title"] = html.xpath("//*[@id=\"activity-name\"]/text()")
        item["title"] = [i.replace("\n", "").replace(" ", "") for i in item["title"]]
        item["laiyuan"] = html.xpath("//*[@id=\"js_name\"]/text()")
        item["laiyuan"] = [i.replace("\n", "").replace(" ", "") for i in item["laiyuan"]]
        item["other"] = html.xpath("//*[@id=\"js_content\"]//text()")
        
        content_list.append(item)
      
        return content_list

5.保存html的函数:

    def save_html(self, html_str, page_name):
        file_path = "html/lufa/{}.html".format(page_name)
        with open(file_path, "w", encoding="utf-8") as f:
            f.write(html_str)

6.实现主要逻辑:

    def run(self):  
  		# 获取url列表和时间列表
        url_list, time_list = self.get_url_list()

        # 打开数据库连接(ip/数据库用户名/登录密码/数据库名)
        db = pymysql.connect("localhost", "root", "root", "weixin_database")

        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = db.cursor()
        
		# 遍历url列表,发送请求,获取响应
        for url in url_list:
            num = url_list.index(url)
            print(num)
           	# 解析url,获得html
            html_str = self.parse_url(url)
            # 获取内容
            content_list = self.get_content_list(html_str)
            # list转字符串
            title = ''.join(content_list[0]["title"])
            other = '\n'.join(content_list[0]["other"])
            # 根据下标取发布时间
            create_time = time_list[num]
			

需要匹配出案件号,一般是(2018)最高法行申11236号这种格式的,有的还是(2018)最高88法行申11236号这样的,匹配规则是这样\s*[(|(]20\d+[)|)]\s*[\u4e00-\u9fa5]*[\d]*[\u4e00-\u9fa5]+[\d]+号

 			p1 = re.compile(r'\s*[(|(]20\d+[)|)]\s*[\u4e00-\u9fa5]*[\d]*[\u4e00-\u9fa5]+[\d]+号', re.S)
            anhao = re.search(p1, other)
            if (anhao):
                anhao = anhao.group().replace("\n", "")
            else:
                anhao = ""

对于公众号文章,每一篇的内容都在同一个div中,而且全是<p>标签,并且没有选择器idclass,所以想要单独取出某部分内容比较麻烦。

所以使用正则表达式取出文章的一些重要的文字,如图想要匹配出裁判要点中的所有文字
在这里插入图片描述

            p2 = re.compile(r'\s[【]*裁判要点\s*.*?(?=[【]|裁判文)', re.S)
            zhaiyao = ''.join(re.findall(p2, other)).replace("\n", "")

还想取出所有文本的那个div,然后可以按照它的格式在自己的网页中显示

            p3 = re.compile('<div class="rich_media_content " id="js_content">.*?</div>', re.S)
            html = re.search(p3, html_str)
            if (html):
                html = re.search(p3, html_str).group().replace("\n", "")

            else:
                html = html_str.replace("\n", "")
                
			page_name = title
            self.save_html(html, page_name)

把取出的数据保存到数据库中


            sql = """INSERT INTO weixin_table(title,url,anhao,yaozhi,other,html,create_time,type_id)
                VALUES ({},{},{},{},{},{},{},{})""".format('"' + title + '"', '"' + url + '"', '"' + anhao + '"',
                                                           '"' + zhaiyao + '"', '"' + other + '"', "'" + html + "'",
                                                           create_time, 4)
            #             print(sql)
            try:
                # 执行sql语句
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
            except:
                print("数据插入失败:")
                info = sys.exc_info()
                print(info[0], ":", info[1])
                # 如果发生错误则回滚
                db.rollback()
   
        # 关闭数据库连接
        db.close()

7.运行程序:

if __name__ == '__main__':
    weixin_spider = WeixinSpider_1()
    weixin_spider.run()

8.数据库中保存的数据:
在这里插入图片描述
9.有了数据之后就可以在自己的网页里显示了。


  • 9
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
Python可以用于爬取微信公众号文章。有几种方式可以实现这一目标,其中一种方式是通过登录微信公众号平台,在里面搜索要爬取公众号,然后进行抓包。另外一种方式是使用安卓模拟器进行抓包。还可以使用搜狗的微信模块来获取数据。 在使用第一种方式时,首先需要拥有一个微信公众号的账号。然后,通过工具如pycharm和fiddler等,登录微信公众号平台,进入创作管理,选择图文素材,然后创建或编辑文章。最后,通过添加引用和查找公众号文章等步骤,进行数据的爬取和收集。 在实现这些步骤之前,你需要了解微信公众号平台的主要功能和界面布局。主面板可以划分为七大块,每个块都有不同的功能。在后续的操作中,你可以使用Python代码来模拟微信请求,并实现数据的爬取和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [欢度国庆⭐️共享爬虫之美⭐️基于 Python 实现微信公众号爬虫Python无所不能爬)](https://blog.csdn.net/xiejiachao/article/details/120573509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【爬虫python爬取微信公众号](https://blog.csdn.net/qq_36269293/article/details/109244944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值