記錄一次快速實現的python爬蟲,想要抓取中財網數據引擎的新三板板塊下面全部股票的公司檔案,網址爲http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995.html。html
比較簡單的網站不一樣的頁碼的連接也不一樣,能夠經過觀察連接的變化找出規律,而後生成所有頁碼對應的連接再分別抓取,可是這個網站在換頁的時候連接是沒有變化的,所以打算去觀察一下點擊第二頁時的請求python
發現使用的是get的請求方法,而且請求裏有curpage這個參數,貌似控制着不一樣頁數,因而改動了請求連接中的這個參數值爲其餘數值發現並無變化,因而決定換一種方法,就是咱們標題中提到的使用selenium+beautifulsoup實現模擬點擊網頁中的下一頁按鈕來實現翻頁,並分別抓取網頁裏的內容。git
首先咱們先作一下準備工做,安裝一下須要的包,打開命令行,直接pip install selenium和pip install beautifulsoup4 github
而後就是下載安裝chromedriver的驅動,網址以下https://sites.google.com/a/chromium.org/chromedriver/downloads,記得配置下環境變量或者直接安裝在工做目錄下。(還可使用IE、phantomJS等)web
這裏咱們先抓取每個股票對應的主頁連接,代碼以下(使用python2):chrome
1 # -*- coding: utf-8 -*-
2 from selenium import webdriver
3 from bs4 import BeautifulSoup
4 import sys
5 reload(sys)
6 sys.setdefaultencoding('utf-8')
7
8 def crawl(url):
9 driver = webdriver.Chrome()
10 driver.get(url)
11 page = 0
12 lst=[]
13 with open('./url.txt','a') as f:
14 while page < 234:
15 soup = BeautifulSoup(driver.page_source, "html.parser")
16 print(soup)
17 urls_tag = soup.find_all('a',target='_blank')
18 print(urls_tag)
19 for i in urls_tag:
20 if i['href'] not in lst:
21 f.write(i['href']+'\n')
22 lst.append(i['href'])
23 driver.find_element_by_xpath("//a[contains(text(),'下一頁')]").click()
24 time.sleep(2)
25 return 'Finished'
26 def main():
27 url = 'http://data.cfi.cn/cfidata.aspx?sortfd=&sortway=&curpage=2&fr=content&ndk=A0A1934A1935A1986A1995&xztj=&mystock='
28 crawl(url)
29 if __name__ == '__main__':
30 main()
運行代碼發現老是報錯:app
這裏報錯的意思是找不到想要找的按鈕。python爬蟲
因而咱們去查看一下網頁源代碼:網站
發現網頁分爲不一樣的frame,因此咱們猜測應該須要跳轉frame,咱們須要抓取的連接處於的frame的name爲「content」,因此咱們添加一行代碼:driver.switch_to.frame('content')google
def crawl(url):
driver = webdriver.Chrome()
driver.get(url)
driver.switch_to.frame('content')
page = 0
lst=[]
with open('./url.txt','a') as f:
while page < 234:
soup = BeautifulSoup(driver.page_source, "html.parser")
print(soup)
urls_tag = soup.find_all('a',target='_blank')
print(urls_tag)
for i in urls_tag:
if i['href'] not in lst:
f.write(i['href']+'\n')
lst.append(i['href'])
driver.find_element_by_xpath("//a[contains(text(),'下一頁')]").click()
time.sleep(2)
return 'Finished'
至此,運行成:
參考博文連接: http://unclechen.github.io/2016/12/11/python%E5%88%A9%E7%94%A8beautifulsoup+selenium%E8%87%AA%E5%8A%A8%E7%BF%BB%E9%A1%B5%E6%8A%93%E5%8F%96%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9/
http://www.cnblogs.com/liyuhang/p/6661835.html