网站调用新浪微博内容(新浪哥又开始抓严了,只好真的去“模拟”浏览器了 )
优采云 发布时间: 2022-01-17 11:00网站调用新浪微博内容(新浪哥又开始抓严了,只好真的去“模拟”浏览器了
)
前言
最近在和新浪大佬PK。首先是从网络上抓取新浪微博。遇到的问题是cookies的生命周期太慢了。通常,爬行 10 分钟后会覆盖一个。后来又发明了模拟登录的手机版。过了一段时间的一帆风顺,新浪又来了验证码,气得半死。无奈手动输入验证码,然后模拟登录。然而不到两个月,新浪又开始严格了,以至于手机版的模拟登录经常无法登录。最后实在没有办法,只好真的“模拟”浏览器来实现爬虫。说到浏览器自动化,selenium 是目前最好用的一种。
关于硒
Selenium 最初是用于 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户一样。它支持的浏览器包括 IE、Chrome 和 Firefox。现在很多bug高手为了绕过反爬虫机制选择了selenium。由于 selenium 的原理是唤起浏览器操作,代价就是爬虫很慢。
安装硒
我的机器是Ubuntu,所以下面主要总结一下我在Ubuntu的安装过程。
1. 进入安装命令行 sudo pip install -U selenium
2.下载驱动geckodriver(百度网盘下载链接)
3.更新浏览器,(如FireFox:sudo apt-get update –> sudo apt-get install firefox)
硒测试代码
from selenium import webdriver
browser = webdriver.Firefox(executable_path='/home/gdufs-iiip/PycharmProjects/Weibo/geckodriver') ## 配置驱动文件所在的路径
browser.get("http://www.weibo.com/login.php") ## 浏览器Get请求访问
print browser.page_source ## 输入返回的源代码
硒化验结果
模拟登录过程
selenium打开的浏览器,但是用户可以正常使用这个浏览器。所以模拟登录的过程其实就是程序设置休眠时间,让用户输入账号密码完成登录操作,然后实现网页爬取。具体代码如下:
from selenium import webdriver
import time
browser = webdriver.Firefox(executable_path='/home/gdufs-iiip/PycharmProjects/Weibo/geckodriver') ## 配置驱动文件所在的路径
browser.get("http://www.weibo.com/login.php") ## 浏览器Get请求访问
begin_time = time.time() ##记录开始账号密码的时间
content = '' ## 记录网页源代码
while(True):
if ((time.time() - begin_time) > 60): ## 实现登录的时限为60秒
search_url = 'http://weibo.cn/search/mblog?hideSearchFrame=&keyword=林丹出轨&sort=hot&page=1' ##实行新闻网页抓取
browser.get(search_url)
content = browser.page_source
break
print content