# wechat-gongzhonghao-crawler(微信公众号爬虫)
![](imgs/crawler.gif)
这个项目是通过pywinauto控制windows(win10)上的微信PC客户端来实现公众号文章的抓取。代码分成server和client两部分。server接收client抓取的微信公众号文章,并且保存到数据库。另外server支持简单的搜索和导出功能。client通过pywinauto实现微信公众号文章的抓取。
## 安装和部署
### Server的安装
Server由Java实现,理论上可以部署到Client可以访问的任何服务器上,这里假设Server和Client都安装在一台windows 10的机器上。
#### 安装mysql 5.7
用户可以在[这里](./tools/mysql-installer-community-5.7.33.0.msi)下载mysql,也可以去官网下载,但是请注意:目前只支持5.X版本的mysql。下面介绍在win10上安装的过程。
##### 安装
执行下载msi的安装文件,在"Choosing a Setup Type"里选择"Server only"。 然后点击next安装。安装完了需要配置。
##### mysql配置
"Type and Networking",可以选择"Development Computer",如果机器的资源比较丰富,也可以选择"Server Computer"。 "Accounts and Roles"设置root密码。 "Windows Service"使用默认设置。
##### 修改utf8编码
找到mysql服务的配置文件地址,可以在搜索栏输入"服务",然后找到mysql服务,右键点击属性,找到mysql配置文件的位置,如下图所示:
![](imgs/1.png)
图中显示配置文件的位置为"C:\ProgramData\MySQL\MySQL Server 5.7\my.ini",修改这个文件,加入:
```
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
character-set-server=utf8mb4
```
注意:我们需要找到my.ini文件下面的\[client\],然后把default-character-set=utf8mb4加到它的下面。类似的,在\[mysql\]和\[mysqld\]下面加入那些内容。 注意:不能直接把上面的文本复制到mysql.ini文件。ini文件是用"\[client\]"分成不同的部分的。 修改后重启服务,如下图所示:
![](imgs/2.png)
可以用下面的sql命令检查配置是否正确:
mysql> SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
结果应该是:
```
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
```
##### 建表
在开始菜单寻找"Mysql 5.7 Command Line Client - Unicode",点击后命令行执行 mysql -u root -p,输入root密码后执行下面的命令:
```
# run as root
CREATE DATABASE `wechat`;
CREATE USER 'wechat'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL PRIVILEGES ON wechat.* TO 'wechat'@'localhost';
FLUSH PRIVILEGES;
```
如果需要,也可以修改wechat的密码为其它值,但是后面的配置文件也需要设置成对应的密码。 然后exit退出,然后用wechat账号重新登录:mysql -u wechat -p,并创建表:
```
use wechat;
CREATE TABLE `webpage` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(512) NOT NULL,
`title` varchar(1024) NOT NULL,
`pub_name` varchar(128) NOT NULL,
`pub_time` datetime DEFAULT NULL,
`html` mediumblob,
`content` mediumtext,
`last_update` datetime DEFAULT NULL,
`crawl_wechat_id` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
KEY `last_update` (`last_update`),
KEY `pub_name` (`pub_name`),
KEY `crawl_wechat_id` (`crawl_wechat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `state` (
`id` int NOT NULL,
`url` varchar(512) NOT NULL,
`pub_name` varchar(128) NOT NULL,
`title` varchar(1024) NOT NULL,
`crawl_state` tinyint NOT NULL, # 1: 未抓取网页, 0: 抓取成功, 2: 失败1次 3: 失败2次,...
`counter_state` tinyint NOT NULL, # 1: 未更新计数, 0: 更新成功, 3: 失败1次 ....
`first_add` datetime NOT NULL,
`last_update` datetime NOT NULL,
`sync_page` tinyint NOT NULL, # 0 未同步,1已同步
`sync_counter` tinyint NOT NULL,
PRIMARY KEY (`id`),
KEY `pub_name` (`pub_name`),
KEY `crawl_state` (`crawl_state`),
KEY `counter_state` (`counter_state`),
KEY `sync_page` (`sync_page`),
KEY `sync_counter` (`sync_counter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `heartbeat` (
`crawl_wechat_id` varchar(128) NOT NULL,
`activity_type` varchar(256) NOT NULL,
`last_update` datetime NOT NULL,
PRIMARY KEY (`crawl_wechat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `debuginfo` (
`crawl_wechat_id` varchar(128) NOT NULL,
`content` MEDIUMTEXT,
PRIMARY KEY (`crawl_wechat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
阅读数的表:
```
CREATE TABLE `counter` (
`id` int(11) NOT NULL,
`read_count` int DEFAULT -1,
`last_update` datetime NOT NULL,
`crawl_wechat_id` varchar(128) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
如果用户从v1.0升级到v1.1,则只需要新增counter表就行。
升级到v1.2:
```
ALTER TABLE `counter`
ADD COLUMN `star_count` int DEFAULT -1,
ADD COLUMN `share_count` int DEFAULT -1;
```
如果用户从v1.1升级到v1.2,只需要执行上面的命令就行。
#### 安装JDK并启动服务
用户可以在[这里](./tools/jdk-8u271-windows-x64.exe)下载JDK,或者根据自己的机器选择其它版本的JDK。安装后需要设置环境变量,确保可以通过cmd运行Java。
jdk的安装使用默认选项就可以。启动命令行,输入java确认安装成功。如果找不到请设置PATH环境变量,具体可以上网搜索。 在[release](https://github.com/fancyerii/wechat-gongzhonghao-crawler/releases)下载最新版本的wechat-crawler-server-...-jar-with-dependencies.jar。把这个jar包放到某个文件夹下,然后在这个文件夹下创建一个conf的目录。在conf下新建一个dbConf.properties配置文件,然后修改其内容:
```
MYSQL_DRIVER=org.gjt.mm.mysql.Driver
MYSQL_URL=jdbc:mysql://localhost:3306/${db}
MYSQL_USER=wechat
MYSQL_PASS=mypass
```
主要是修改密码。
然后在命令行执行:
```
java -cp wechat-crawler-server-{VERSION}-jar-with-dependencies.jar com.github.fancyerii.wechatcrawler.server.service.WechatCrawlerServer
```
请修改{VERSION}为实际文件的值。
### Client的安装
#### 安装和登录微信
请下载的[微信安装程序](./tools/WeChatSetup-3.1.0.exe)安装,安装完成后参考[这篇文章](https://jingyan.baidu.com/article/656db9184040b5a380249c66.html)禁止微信自动升级,然后扫码登录。请读者使用3.1版本的微信客户端,因为版本升级或者变化可能导致代码无法正常运行。
#### 系统设置
因为爬虫的工作原理是控制微信,所以需要去掉windows的自动锁屏功能。具体方法可以参考[这篇文章](https://jingyan.baidu.com/article/91f5db1b00c5b31c7f05e3cb.html)。
#### 安装tesseract
v1.1新增,如果需要抓取阅读数需要安装它。安装方法参考[这里](https://fancyerii.github.io/2021/05/25/pywinauto-wechat-crawler-3/#%E5%AE%89%E8%A3%85windows%E7%89%88%E6%9C%AC%E7%9A%84tesseract),请记得确认安装的路径是“C:\Program Files\Tesseract-OCR\tesseract”,目前的代码还不能配置这个路径。
#### 设置客户端
首先去[release](https://github.com
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论
收起资源包目录
微信公众号爬虫.zip (50个子文件)
SJT-code
tools
WeChatSetup-3.1.0.exe 134B
mysql-installer-community-5.7.33.0.msi 134B
jdk-8u271-windows-x64.exe 134B
.gitattributes 213B
LICENSE 11KB
client
config.ini 292B
crawler
__init__.py 0B
__main__.py 15KB
wechatautomator.py 36KB
imgtool.py 14KB
requirements.txt 448B
cli.py 2KB
server
pom.xml 3KB
doc
sql2.txt 939B
sql3.txt 221B
sql.txt 2KB
client.txt 0B
sql4.txt 172B
test 278B
src
main
resources
logback.xml 658B
templates
search.html 2KB
viewPage.html 623B
public
js
jquery-3.4.0.min.js 86KB
log4j.properties 203B
java
com
github
fancyerii
wechatcrawler
server
tool
Tool.java 4KB
ConfigReader.java 588B
MyDateTypeAdapter.java 688B
ThymeleafTemplateEngine.java 4KB
data
State.java 395B
MysqlArchiver.java 32KB
WebPageSearchItem.java 354B
HeartBeat.java 278B
Counter.java 325B
WebPageSearchResult.java 318B
WebPage.java 507B
service
PageAndCounterSyncer.java 7KB
WechatCrawlerServer.java 16KB
TestUtf8.java 458B
TestPage.java 555B
WechatSyncServer.java 9KB
WebContentCrawler.java 4KB
DumpDebugInfo.java 645B
imgs
FetcherAndWriter.java 91B
conf
dbConf.properties 202B
cfg.txt 193B
README.md 211B
imgs
1.png 19KB
crawler.gif 3.32MB
2.png 46KB
README.md 17KB
共 50 条
- 1
资源评论
JJJ69
- 粉丝: 6350
- 资源: 5918
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 科目一,扣分法规的的的的
- 科目一易错题,整理的的的的
- C#ASP.NET企业智能办公OA系统源码带文档数据库 SQL2008源码类型 WebForm
- mixiao网站下载的模型 替换ue 小白人
- YOLOv11实现并使用NVIDIA TensorRT进行优化的对象检测项目源码
- python爬虫实战开发之bs4应用和xpath结合实战操作.zip
- 电子课程设计项目《多功能数字时钟(包括了基本的计数显示,还有提高部分,如星期和月份的动态展示)》+项目源码+文档说明
- C#大型OA源码 网络在线办公平台源码数据库 SQL2008源码类型 WebForm
- RV1106编译速度、驱动加载
- tensorflow安装-不同操作系统环境下TensorFlow的安装指南与步骤
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功