selenium爬取新浪滾動新聞新聞
阿新 • • 發佈:2018-12-18
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下安裝:
- 將下載好的檔案解壓
- 將chromedriver.exe移到python安裝目錄的Script中即可(可以開啟環境變數檢視python的安裝位置)
mac下安裝
- 開啟終端
- 輸入cd /usr/bin
- 輸入open .
- 然後把下載解壓好的chromedriver拖到開啟的檔案裡面
- 輸入chromedriver --version檢查一下
- 加入環境變數
開啟終端,輸入: 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()