1. 程式人生 > >selenium爬取新浪滾動新聞新聞

selenium爬取新浪滾動新聞新聞

selenium安裝方法

pip3 install selenium

chromedriver安裝方法

chromedriver版本 支援的Chrome版本
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55
v2.24 v52-54
v2.23 v51-53
v2.22 v49-52
v2.21 v46-50
v2.20 v43-48
v2.19 v43-47
v2.18 v43-46

windows下安裝:

  1. 將下載好的檔案解壓
  2. 將chromedriver.exe移到python安裝目錄的Script中即可(可以開啟環境變數檢視python的安裝位置)

mac下安裝

  1. 開啟終端
  2. 輸入cd /usr/bin
  3. 輸入open .
  4. 然後把下載解壓好的chromedriver拖到開啟的檔案裡面
  5. 輸入chromedriver --version檢查一下
  6. 加入環境變數 開啟終端,輸入: cd ~ 回車,會進入~資料夾 然後輸入:touch .bash_profile,回車執行後, 再輸入:open -e .bash_profile 回車 會在TextEdit中開啟這個檔案(如果以前沒有配置過環境變數,那麼這應該是一個空白文件)。如果有內 容,請在結束符前輸入,如果沒有內容,請直接輸入如下語句:
    export PATH=$PATH:/usr/local/bin/ChromeDriver
    
    然後儲存檔案,就可以看到,已經裝好了,可以試下

以下是爬取新浪滾動新聞頁面的程式碼

from selenium import webdriver
from selenium.
webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.common.exceptions import TimeoutException from pyquery import PyQuery as pq browser = webdriver.Chrome() wait = WebDriverWait(browser, 10) # 進入爬取頁面 def search(): try: url = 'https://news.sina.com.cn/roll/#pageid=153&lid=2509&k=&num=50&page=1' browser.get(url) wait.until(EC.presence_of_element_located((By.ID, 'pL_Main'))) getDetail() total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#d_list > div > span:nth-child(14) > a'))) return total.text except TimeoutError: return search() # 得到具體資訊 def getDetail(): html = pq(browser.page_source,parser="html") content = html.find('#d_list') uls = content.find('ul').items() for ul in uls: lis = ul('li').items() for li in lis: news = { 'title': li.find('.c_tit a').text(), 'href': li.find('.c_tit a').attr('href'), 'time': li.find('.c_time').text() } print(news) # 輸出內容 # 爬取下一頁 def next_detail(page_number): try: nextBotton = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#d_list > div > span:last-child > a'))) nextBotton.click() wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#d_list > div > span.pagebox_num_nonce'), str(page_number))) getDetail() except TimeoutException: next_detail(page_number) def main(): total = search() total = int(total) print(total) for i in range(2, total + 1): next_detail(i) if __name__ == '__main__': main()