使用selenium webdriver+beautifulsoup+跳轉frame,實現模擬點擊網頁下一頁按鈕,抓取網頁數據


  記錄一次快速實現的python爬蟲,想要抓取中財網數據引擎的新三板板塊下面所有股票的公司檔案,網址為http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995.html。

  比較簡單的網站不同的頁碼的鏈接也不同,可以通過觀察鏈接的變化找出規律,然后生成全部頁碼對應的鏈接再分別抓取,但是這個網站在換頁的時候鏈接是沒有變化的,因此打算去觀察一下點擊第二頁時的請求

 

 

 

  發現使用的是get的請求方法,並且請求里有curpage這個參數,貌似控制着不同頁數,於是改動了請求鏈接中的這個參數值為其他數值發現並沒有變化,於是決定換一種方法,就是我們標題中提到的使用selenium+beautifulsoup實現模擬點擊網頁中的下一頁按鈕來實現翻頁,並分別抓取網頁里的內容。

  首先我們先做一下准備工作,安裝一下需要的包,打開命令行,直接pip install selenium和pip install beautifulsoup4 

  然后就是下載安裝chromedriver的驅動,網址如下https://sites.google.com/a/chromium.org/chromedriver/downloads,記得配置下環境變量或者直接安裝在工作目錄下。(還可以使用IE、phantomJS等)

  這里我們先抓取每一個股票對應的主頁鏈接,代碼如下(使用python2):

 

 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()

 

    運行代碼發現總是報錯:

    這里報錯的意思是找不到想要找的按鈕。

    於是我們去查看一下網頁源代碼:

    發現網頁分為不同的frame,所以我們猜想應該需要跳轉frame,我們需要抓取的鏈接處於的frame的name為“content”,所以我們添加一行代碼:driver.switch_to.frame('content')

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM