Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

咱们这个爬虫的原理是什么呢 #6

Open
cocotyty opened this issue Sep 29, 2016 · 9 comments
Open

咱们这个爬虫的原理是什么呢 #6

cocotyty opened this issue Sep 29, 2016 · 9 comments

Comments

@cocotyty
Copy link

核心原理是走的什么接口呢

@yijingping
Copy link
Member

原理就是模拟人工点击。
搜狗微信反爬虫机制比较强,需要加代理池、原生浏览器解析、失败重试、按照一定的顺序爬取等机制。

1 先上一张该项目的架构图。
wechatimg8

流程就是这样:

  1. “任务计划器” 从数据库获取要爬取的公众号和关键字,并更新下次爬取时间。 放入“下载队列”。
  2. “下载器” 从 “下载队列” 获取公众号和关键字,去 搜狗微信 爬取。 将爬取到的html放入“抽取队列”
    3)“抽取器” 从 “抽取队列” 获取html,并解析成 数据库字段(标题、内容、发布时间等)。放入 “存储队列”
    4)“数据存储器” 从 “存储队列” 获取记录,存入数据库或者文件

中间用了消息队列,所以可以做到分布式 和 高并发

2 “去搜狗微信爬取” 的过程

1) 从代理池,获取一个代理ip
2)启动浏览器
3)访问搜狗微信首页
4)输入公众号id或者关键词,点击搜索
5.1)如果是搜公众号id,进入公众号列表页,找到公众号,点击进入文章列表页
5.2) 如果是搜关键词,直接进入文章列表页
6)点击每一篇文章,获取html
7)如果在第 3)4)5)步失败,则将本次爬取任务,重新丢回“下载队列”,并记录重试次数。

@cocotyty
Copy link
Author

cocotyty commented Oct 3, 2016

哦 还是从搜狗爬去啊

@cocotyty
Copy link
Author

cocotyty commented Oct 3, 2016

棒棒的!

@ichenfujun
Copy link

hi:
在v2上看到你的帖子,最近也是通过搜狗抓的。刚开始抓的公众号少的时候抓放慢抓取频率问题不大,现在需要抓取的公众号增多,被封的厉害。想着通过代理来解决问题,不过在网上搜了一圈发现那些所谓的代理IP都是通过抓取得到的,可用性和时效性都非常差。就是想跟你咨询一下:你们的代理IP是通过什么方法获取,IP池里的IP可用比例有多大,IP池怎么维护的?

谢谢!

@yijingping
Copy link
Member

@ichenfujun 我在淘宝上买的动态vps,搭建的代理。不过成本略高,效果也不太好。

建议被封后,触发本地自动拨号换ip,感觉更靠谱一些。

@liuyang66
Copy link

您好 我想问一下架构图中mongoDB是用Redis代替了吧?Redis和MySQL是什么样的关系 我看要爬取的公众号和关键字还是存到了本地的M有SQL中

@yijingping
Copy link
Member

@liuyang66 现在所有数据都存储在mysql中,没有用mongodb。 redis只是用来做消息队列用的。

@dddb2cat
Copy link

@yijingping 你好,想问下,数据库可以替换成Mongo吗

@yijingping
Copy link
Member

@Chuenfai 不支持

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants