分享一个服务器环境导致爬虫问题的案例.情况是这样的,某个爬虫程序(为了更好的兼容性,使用了headless浏览器而非常见的爬虫框架).在本机的ubuntu 16.04中文桌面版环境下,对某站爬取数据一切正常. 迁移到生产环境的ubuntu 16.04服务器版后,会出现对应的元素找不到,或者解析回来的数据错误的情况.已确认必须环境都已安装.这就很奇怪了.一个偶然的因素,发现这个站点会检测浏览器语言,如果没有设置浏览器语言,那么浏览器默认会使用系统的语言设置.而服务器版的ubuntu的默认语言设置是英语.出于国际化的目的,这个站点会根据客户端浏览器语言对应语言的页面.而这些语言的页面并非是同样的页面结构的......我...~ (+﹏+)~
知道原因就好办了.那就在初始化headless浏览器的时候传入参数就好了.
from selenium import webdriver
profile = webdriver.FirefoxProfile()
"""因为headless的浏览器的语言跟随操作系统,为了保证爬回来的数据是正确的语言,这里必须设置浏览器的初始化参数"""
profile.set_preference("intl.accept_languages", "zh-cn")
browser = webdriver.Firefox(profile)
问题解决.
其实headless浏览器有很多设置选项,但是这些选项网上不好查,其实这个不用查的.我拿火狐的headless浏览器举个例子,绝大多数配置和标准版的火狐浏览器是一样的,想知道火狐的headless浏览器的全部初始化参数?那么请打开火狐浏览器,在地址栏输入about:config然后回车,选择忽略警告即可.