/Spider

Team:Spider-Entry-Crawler-Leader-CZC

Primary LanguagePythonMozilla Public License 2.0MPL-2.0

使用方法

命令行键入下列命令之后,程序将会运行并抓取目标用户发布微博,并以csv形式输入结构化数据

# 爬取JNU校园网模块
python main.py --type jnu
# 爬取百度学术的模块,keywords可以根据需要换成自己想要的检索词
python main.py --type baidu --keywords "deep learning, machine learning"
# 微博模块测试
python main.py --type weibo --user-id 2714280233
python main.py --type weibo --user-id 1792634467
# 豆瓣模块测试
python main.py --type douban --entry-id 35209731 --st 1 --ed 20
python main.py --type douban --entry-id 35209733 --st 1 --ed 20

反反爬虫内容

  • 已尝试反反爬虫涉及的技术内容:

    • User-Agent 检查:服务器会从 User-Agent 对应提供键值信息之中提取客户端使用信息。User-Agent相当于客户端的身份标识。我们代码编写的 HTTP 请求头中,程序使用了随机选择的 User-Agent 字段,使得每次请求的 User-Agent 都不同,增加了爬虫被检测的难度。
    • Cookie 检查: 基于 Cookie 反爬虫机制是网站通过在用户的浏览器之中设置 Cookie,然后要求每个请求携带有效的 Cookie。服务器会验证请求中的 Cookie 信息,如果缺少或无效,则会判定为爬虫行为并且进行相应的限制,例如拒绝访问或返回反爬虫提示页面
    • IP 限制:爬虫与人访问网页最大的区别在于,爬虫一般完成的是短时间内超一般数量的访问,而人对网页的访问一般呈现随机性与线性增长性。基于以上特性,IP封锁是一种十分高效的反爬手段。如果某个单一IP在短时间内的访问量超出了某个既定的阈值则可判断此访问行为非人所为,对其进行封禁。我们的代码之中没有直接体现IP限制,但在代码之外,我们使用了 VPN 技术来切换不同的代理节点,从而在一定程度上避免了被 IP 限制的风险。此外,程序在爬取完每一页之后都会随机暂停一段时间,也可以减小被 IP 限制的风险。
    • JavaScript 渲染 / Ajax 异步传输:我们代码的 utils 模块提供了simulate_WebBrowser 函数,其使用 Selenium Webdriver 技术创建一个浏览器驱动对象,并用无头浏览器模式打开目标网页。这样就可以像人一样访问网页,执行其中的 JavaScript 脚本,并等待所有 Ajax 异步传输完成,再用 driver.page_source 方法获取完整的页面源代码,包括 JavaScript 渲染和 Ajax 异步传输之后的结果。这样就可以从页面源代码中提取需要的信息。
  • 未来的工作:

    • 验证码验证:验证码机制旨在识别并阻止自动化程序,我们尝试使用 PIL 方法识别数字验证码,但是国内网站的验证码通常是中文且要求按照特定顺序点击,同一个网站有时候会要求用户填写验证码,有时候会要求用户添加拖动滑块等,这些不确定性给破解这些反爬虫机制带来了较大的困难;
    • 浏览器指纹验证:通过修改浏览器的设置、添加浏览器插件或使用浏览器扩展程序,可以改变浏览器指纹中的一些关键属性,但是频繁手动修改这些属性已经违背爬虫自动化处理的本意,因而另外一种可能的方案是使用匿名浏览器;
    • 破解关键的 JavaScript 混淆代码:尝试对知乎、哔站评论区、网页版微博个人主页进行爬虫的过程中,我们发现的这些网站使用了较为特殊的使用了 JavaScript 动态生成页面,即使通过 Selenium Webdriver 创建浏览器进程模拟人类打开页面的行为,仍然无法获得带有数据信息的HTML 页面,爬取的仍然是一堆 Javaascript 代码,这种情况不容易解决,
      • 分析 JavaScript 代码:对于动态页面渲染的网站,往往需要破解其 JavaScript 代码来获取页面内容。可以通过 Chrome 浏览器的开发者工具等工具来分析 JavaScript 代码,并找出其中动态生成页面内容的关键代码,从而模拟执行这些代码,获取完整的页面内容;
      • 使用其它模块工具:除了手动分析 JavaScript 代码之外,还可以使用一些专业的工具来自动化地破解动态页面渲染的反爬虫技术。例如,可以使用 Splash、Pyppeteer、Playwright 等工具,这些工具可以模拟浏览器操作,自动执行 JavaScript 代码,从而获取完整的页面内容;

爬取之后再对结构化的数据进行可视化