【爬虫】– 抓取微信好友详细信息

本文实现的是一种较为安全、简洁、高效的抓取微信好友信息的方法。
实现工具:微信pc端、影刀RPA

主要流程:

手动—前期准备,电脑登陆微信,打开联系人页,使得联系人分类“A”显现在微信窗口界面前期准备
自动—运行程序:

  1. 利用元素的文本定位到“A”文本框,获取其底部坐标;
  2. 坐标Y轴向下偏移,鼠标左键单击,右边显示出联系人详情(一般是0~60像素,具体范围可利用截图工具获取联系人文本框的高度);
  3. 在详情页获取联系人的信息;
  4. 获取完一个联系人信息后,将获取到的信息写入到数据表格中;
  5. 通过快捷键指令控制键盘“↓”键,单击,跳转下一个联系人详情页,重复3、4步骤;
  6. 通过判断最新抓取的联系人信息和数据表格中的信息是否一致,决定是否跳出循环抓取流程
  7. 待抓取完联系人信息后将数据表格导出Excel表格储存。
    完整程序截图:
    主流程截图1
    主流程截图2
    主流程截图3
    子流程
    抓取后的数据如下:在这里插入图片描述

关键步骤总结:

  1. 性别男、女、无,通过联系人右边的性别标识图像判断;
  2. 由于微信的联系人是可以备注重复的,所以在判断是否抓取到最后一位时,不能通过简单的联系人字符判断,要多条件判断,文中是将所有字段拼接成字符再判断;
  3. 由于联系人详情页有些信息不一定有,比如地区,典型如企业微信联系人、官方助手等等,这时,就要增加异常判断或者超时判断,文中是忽略抓取,将这些不存在信息设为“无”;
  4. 为了提高抓取效率,文中是抓取相似元素列表后,再处理字符列表,根据详情页的标签:昵称、微信号、地区,个性签名和来源,定位列表中的联系人信息(对应标签所在字符列表的索引+1)
### 使用Python实现微信公众号内容的网络爬虫 为了构建一个能够抓取微信公众号内容的网络爬虫,可以采用多种方法和技术栈组合。考虑到目标网站可能具有复杂的JavaScript渲染机制,`Selenium`是一个不错的选择[^3]。 #### 导入必要的库 首先安装并导入所需的库: ```bash pip install selenium requests lxml beautifulsoup4 webdriver_manager ``` 接着,在脚本中引入这些模块: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager import time ``` #### 初始化浏览器实例 创建一个函数用于初始化Chrome WebDriver实例,并设置一些基本参数: ```python def init_driver(): options = webdriver.ChromeOptions() options.add_argument('--headless') # 设置无头模式运行 driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options) return driver ``` #### 访问页面并获取数据 定义另一个函数负责访问指定URL以及提取所需的数据: ```python def fetch_wechat_articles(driver, public_account_name): base_url = "https://weixin.sogou.com/weixin" params = { 'query': public_account_name, '_sug_type_': '', 'sut': '', 'lkt': '', 'page': 1, 'ie': 'utf8', 'type': 1 } search_query = f"{base_url}?{urllib.parse.urlencode(params)}" driver.get(search_query) try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "news-list")) ) articles = [] items = element.find_elements(By.CSS_SELECTOR, ".txt-box h3 a") for item in items[:5]: # 只取前五篇文章链接为例 title = item.text.strip() link = item.get_attribute('href') articles.append({"title": title, "link": link}) return articles except Exception as e: print(f"Error occurred while fetching articles: {e}") return None ``` 此部分代码通过模拟搜索引擎查询特定公众号名称的方式找到对应的文章列表页,并从中解析出每篇推文的具体链接地址。 #### 处理HTML实体字符转义问题 当处理从网页上抓取下来的文本时,可能会遇到HTML实体编码的问题。对于这个问题,建议使用`html`标准库中的unescape方法替代已经过时的方法[^4]: ```python import html escaped_text = "<p>This is an example.</p>" unescaped_text = html.unescape(escaped_text) print(unescaped_text) # 输出:<p>This is an example.</p> ``` 以上就是利用Python编写的简单版微信公众号文章抓取器的主要组成部分。需要注意的是实际开发过程中还需要考虑更多细节如异常处理、反爬策略应对等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值