使用Python中的selenium库进行微信公众号爬取

@TOC

预备知识

selenium库

selenium库是一个用来模拟人们的一般上网操作来进行网络数据爬取的Python库,他模拟人们上网时所进行的大部分操作,比如说点击按钮、输入文字等操作。
在爬取微信公众号的过程中,我们会使用到以下操作:

  1. 点击按钮
# 使用xpath语法定位我们需要点击的按钮
button = driver.find_element_by_xpath('//*[@id="js_editor_insertlink"]')
# 执行单击操作
button.click()
  1. 悬停鼠标
# 定位新的标签
collect  = driver.find_element_by_xpath('//*[@id="js_main"]/div[3]/div[2]/div/div/div/div[2]/div/div/div[1]')
# 悬停至收藏标签处
ActionChains(driver).move_to_element(collect).perform()
  1. 切换窗口
# 切换窗口
driver.switch_to.window(driver.window_handles[-1])
  1. 输入文字
# 定位搜索输入框
text_label = driver.find_element_by_xpath('//*[@id="vue_app"]/div[2]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div/div/div[1]/span/input')
# 在搜索框中输入搜索内容
text_label.send_keys('丁香园')

仅仅需要学会以上的操作就可以进行微信公众号文章的爬取了,是不是特别简单!

爬取过程

由于selenium库是通过模拟人们的上网操作来进行爬取数据,我们需要知道人们正常的获取数据的过程,再让selenium库去模拟。想要获取某一个微信公众号的所有文章,就需要知道如何一步步跳转到包含某一公众号所有文章链接的页面。

  1. 注册登录微信公众号平台 (https://mp.weixin.qq.com/)
    在这里插入图片描述
  2. 新建公众号文章
    在这里插入图片描述
  3. 点击超链接
    在这里插入图片描述
  4. 选择其他公众号并搜索你想要爬取的公众号名称
    在这里插入图片描述
    我们便可以获取我们想要爬取公众号的所有文章的文章标题、发布时间和文章链接。
    在这里插入图片描述

实战代码

0.引入所需要的库

import xlwt
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

1.登录微信公众号平台
由于微信对于用户信息的安全保护,在selenium库模拟登录微信公众号号时需要扫码登录,本文并没有实现对二维码登录的破解,所以需要手动扫码登录网站。

driver = webdriver.Chrome()
driver.get('https://mp.weixin.qq.com/')
driver.set_window_size(1500, 800)
#在20秒内扫码登录
sleep(20)
driver.find_element_by_class_name("weui-desktop_name").text

如果登录成功,该代码会返回你的登录名。
在这里插入图片描述
在这里插入图片描述
2.新建公众号文章

# 定位草稿箱按钮
button = driver.find_element_by_xpath('//*[@id="js_level2_title"]/li[1]/ul/li[1]/a/span/span')
# 执行单击操作
button.click()
sleep(2)

# 定位新的创作
collect  = driver.find_element_by_xpath('//*[@id="js_main"]/div[3]/div[2]/div/div/div/div[2]/div/div/div[1]')
# 悬停至收藏标签处
ActionChains(driver).move_to_element(collect).perform()
sleep(2)

#定位新建公众号
button = driver.find_element_by_xpath('//*[@id="js_main"]/div[3]/div[2]/div/div/div/div[2]/div/div/div[2]/ul/li[1]')
button.click()
sleep(2)

3.搜索想要爬取的公众号并进行搜索

# 切换窗口
driver.switch_to.window(driver.window_handles[-1])
sleep(2)

# 定位超链接按钮
button = driver.find_element_by_xpath('//*[@id="js_editor_insertlink"]')
# 执行单击操作
button.click()
sleep(2)

# 定位选择其他公众号按钮,也就是想获取得公众号名称
button = driver.find_element_by_xpath('//*[@id="vue_app"]/div[2]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/p/div/button')
# 执行单击操作
button.click()
sleep(2)

# 定位搜索输入框
text_label = driver.find_element_by_xpath('//*[@id="vue_app"]/div[2]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div/div/div[1]/span/input')
# 在搜索框中输入丁香园
text_label.send_keys('丁香园')
sleep(2)

# 定位搜索按钮
button = driver.find_element_by_xpath('//*[@id="vue_app"]/div[2]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div/div/div[1]/span/span/button[2]')
# 执行单击操作
button.click()
sleep(5)

# 定位第一条搜索结果
button = driver.find_element_by_xpath('//*[@id="vue_app"]/div[2]/div[1]/div/div[2]/div[2]/form[1]/div[4]/div/div/div/div[2]/ul/li[1]/div[1]')
# 执行单击操作
button.click()
sleep(5)

4.获取数据

datas_list = []
page_number = driver.find_elements_by_class_name('weui-desktop-pagination__num')[1].text
for i in range(int(page_number)):
    # 定位数据
    datas = driver.find_elements_by_class_name('inner_link_article_item')
    # 向列表中添加数据
    for i in datas:
        row_list = []
        title = i.find_element_by_class_name('inner_link_article_title').text
        row_list.append(title)
        print(title)
        date = i.find_element_by_class_name('inner_link_article_date').text
        row_list.append(date)
        print(date)
        link = i.find_element_by_tag_name('a').get_attribute('href')
        row_list.append(link)
        print(link)
        print('****************************************************************************')
        datas_list.append(row_list)
    # 实现翻页
    button = driver.find_elements_by_xpath('//*[@id="vue_app"]/div[2]/div[1]/div/div[2]/div[2]/form[1]/div[5]/div/div/div[3]/span[1]/a')[-1]
    button.click()
    sleep(4)
print(datas_list)

5.写入excel

book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('data',cell_overwrite_ok=True)
col = ('标题','发表时间','文章链接')
for i in range(0,3):
    sheet.write(0,i,col[i])

for i in range(len(datas_list)):
    data = datas_list[i]
    for j in range(0,3):
        sheet.write(i+1,j,data[j])
savepath = r'C:\Users\hp\Desktop\公众号数据.xls'
book.save(savepath)
要用Python爬取微信公众号的数据,可以使用第三方itchat和Selenium。 首先,安装itchat:在命令行中输入"pip install itchat",等待安装完成。 然后,使用itchat登录微信账号:在Python代码中导入itchat,通过调用itchat.login()函数登录微信账号。按照提示扫描登录二维码即可。 登录完成后,可以通过itchat.get_mps()函数获取微信公众号列表。可以通过遍历该列表,找到目标公众号的username。 接下来,可以通过itchat.search_mps()函数搜索公众号,传入公众号的名称,返回一个字典,包含公众号的详细信息。从中获取公众号的username。 得到目标公众号的username后,使用itchat.send()函数可以向公众号发送消息,例如发送一个指令来获取公众号的文章列表。 然而,由于微信公众号的网页是动态加载的,无法通过itchat直接爬取。这时候可以使用Selenium来模拟浏览器行为。 首先要安装Selenium,输入"pip install selenium"进行安装。 然后,在代码中导入selenium,并启动一个真实的浏览器,例如Chrome。 接下来,使用浏览器打开微信公众号的网页,需要手动登录微信账号。 登录完成后,可以进行一系列操作,例如点击搜索框输入公众号名称,点击搜索按钮进行搜索,点击公众号进入详情页,然后找到文章列表,使用Selenium提供的方法获取列表的HTML或文本信息。 得到文章列表后,可以使用正则表达式或其他方法进行解析和提取,获取目标数据。 最后,可以保存数据到本地文件,或进行其他后续处理。 总结来说,Python爬取微信公众号的数据,可以使用itchat登录微信账号,获取公众号username;然后使用Selenium模拟浏览器行为,获取公众号的文章列表;最后解析数据并保存。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值