爬取js的必要性在這里就不必多說了,也就是直接請求html并不會返回js所加載的數據,只有經過瀏覽器渲染后才回出現數據,比如在http://s.tool.chinaz.com/same 查詢出的數據是經過js加載的(一方面為了數據不會被搜索引擎爬取,另一方面降低服務器并發負載)。 這種情況python一般可以用PhantomJS實現,這個工具也是在爬蟲界最受好評的一個工具,而且它并不是python模塊。

selenium+PhantomJS下載安裝

selenium安裝方法:

直接pip install?selenium即可

PhantomJS下載安裝:

官網:http://phantomjs.org/ 官網的下載超慢,我傳到了網盤:http://pan.baidu.com/s/1nvhU577 下載解壓,直接將“phantomjs.exe” 文件放到一個固定位置,用來被調用即可 下面直接來一個我寫的例子,站長工具查詢博客的同ip網站

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import time
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
params = DesiredCapabilities.PHANTOMJS   #這本身是一個dict格式類屬性
params['phantomjs.page.settings.userAgent'] = ("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 "
 "(KHTML, like Gecko) Chrome/15.0.87")   #在這個類屬性里加上一個“phantomjs.page.settings.userAgent”
driver = webdriver.PhantomJS(executable_path=r'D:\Python34\phantomjs-2.1.1-windows\bin\phantomjs.exe',desired_capabilities=params)
print(params)   #打印下這個屬性看看還有那些參數
driver.get('http://s.tool.chinaz.com/same?s=www.pojnfb.tw&page=1')  #這時候get方法請求的時候調用DesiredCapabilities.PHANTOMJS屬性的時候就會用上指定的header
time.sleep(2)
content = driver.page_source
soup = BeautifulSoup(content)
for x in soup.find_all('div', class_='w60-0 tl pl10'):
 print(x.contents[0])

返回:??可以看到在這個dict中我們加的user-agent 實際的請求頭user-agent也確實是我們改過的,大家可以自己嘗試

您的支持將鼓勵我們繼續創作!

[微信] 掃描二維碼打賞

[支付寶] 掃描二維碼打賞