前景:在爬虫中遇到过一些AJAX加载的页面,对于这种页面我们最好的解决办法就是分析他的接口,通过构造接口来请求数据,但有限网站的反爬手段比较严格的话,这个接口是不好分析的。在这里提供一种思路,就是利用硒来自动化操作模拟浏览器来获得页面信息,可以使用Chorme或者phantomjs,Chorme是基于浏览器的,因为这边需要将项目部署到服务器上,所以采用无界面浏览器phantomjs。
1.首先需要编写一个方法来获取想要获取的URL
from selenium import webdriver import time import re from selenium.webdriver import DesiredCapabilities class Get_Messge_From_Phantomjs(object): def __init__(self,url): self.url = url self.headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4882.400 QQBrowser/9.7.13059.400', } self.driver = webdriver.PhantomJS() # 为phantomjs添加请求头 cap = DesiredCapabilities.PHANTOMJS.copy() for key, value in self.headers.items(): cap['phantomjs.page.customHeaders.{}'.format(key)] = value # 不载入图片,爬页面速度会快很多 cap["phantomjs.page.settings.loadImages"] = False def request(self): print('开始网页get请求') self.driver.get(self.url) self.scroll_down(driver=self.driver, times=2) # 执行网页下拉到底部操作,执行5次 # 提取所有文章标签 self.parse(self.driver.page_source) def parse(self,content): datas = re.findall(r'http://news.mydrivers.com/\d+/\d+/\d+.htm',content) print(datas) def scroll_down(self,driver, times): for i in range(times): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 执行JavaScript实现网页下拉倒底部 # 保存截图 driver.save_screenshot(str(i + 1) + '.png') time.sleep(2) if __name__ == '__main__': test = Get_Messge_From_Phantomjs("http://news.mydrivers.com/") test.request()注意:因为现在很多网站已经开始对phantomjs无核浏览器进行了一定的反爬,所以这边需要更改一下phantomjs的请求头这段代码是针对当前的网站的,想要获取其他下拉加载网站只需要将url替换以及更改其提取规则,这边我只是简单的用正则提取了文章的url。如果需要文章里更详细的内容,可以将爬下来的很多url放到redis队列里,然后利用scrapy框架和redis对接,实现高效的对文章详情内容的提取。