python爬蟲編程實踐4-大作業:用selenium爬取騰訊新聞的熱點精選

1、任務目標

(1)瞭解ajax加載
(2)通過chrome的開發者工具,監控網絡請求,並分析
(3)用selenium完成爬蟲
(4)任務: 用selenium爬取https://news.qq.com/ 的熱點精選
(5)目標:熱點精選至少爬50個出來,存儲成csv 每一行如下 標號(從1開始),標題,鏈接,…

2、爬取騰訊新聞的熱點精選(自己實現的代碼)

import time
from  selenium import webdriver
#1、進入指定頁面
url = "https://news.qq.com/"

browser = webdriver.Chrome()
browser.set_window_size(1000,30000)
browser.get(url)
#2、通過模擬鼠標滾動來獲得更多的頁面信息
browser.execute_script("window.scrollBy(0,3000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,5000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,8000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,12000)")
time.sleep(1)
browser.execute_script("window.scrollBy(0,15000)")
time.sleep(1)
# 3、抓取新聞標題
titles = browser.find_elements_by_class_name('detail')
# 4、將抓取內容保存在文件中
sfile = open('titles.txt','a',encoding='utf-8')  #新建文件並打開,追加寫模式
for i in range(5,len(titles)):    #因爲前五條是“今日要聞”,從第六條開始才屬於熱點精選內容
    title = titles[i].text.split('\n')[0]   #除了新聞標題,還抓取了無關信息,故進行提取
    link = browser.find_element_by_partial_link_text(title[3:]) # 抓取新聞鏈接,有一條“專題”在首段,影響匹配,故從第3個字符開始
    link_url = [link.get_attribute('href')]  #提取鏈接
    data = str({'num':i-4,'title':title,'url':link_url}) #彙總提取的信息
    ntu.append([i-4,title,link_url[:]]) #將信息寫入列表中
    sfile.writelines(data) #將信息寫入文檔中
sfile.close()
browser.close()
# 按要求從列表中輸出打印
print("{0:^},{1:^}, {2:^}".format('num','\t\t title','\t\t\t\t\t url',chr(12288)))  #打印表頭
for i in range(50):
    n = ntu[i]
    print(ntut.format(n[0],n[1],str(n[2])[1:-1],chr(12288))) #注意,格式化輸入的必須是字符串,並且將兩頭的列表括號刪掉

3 參考代碼

import time
from  selenium import webdriver
driver=webdriver.Chrome(executable_path="D:\chromedriver\chromedriver.exe")
driver.get("https://news.qq.com")
#瞭解ajax加載
for i in range(1,100):
    time.sleep(2)
    driver.execute_script("window.scrollTo(window.scrollX, %d);"%(i*200))
from bs4 import BeautifulSoup
html=driver.page_source
bsObj=BeautifulSoup(html,"lxml")
jxtits=bsObj.find_all("div",{"class":"jx-tit"})[0].find_next_sibling().find_all("li")
# 按照要求打印
print("index",",","title",",","url")
for i,jxtit in enumerate(jxtits):   
    try:
        text=jxtit.find_all("img")[0]["alt"]
    except:
        text=jxtit.find_all("div",{"class":"lazyload-placeholder"})[0].text
    try:
        url=jxtit.find_all("a")[0]["href"]
    except:
        print(jxtit)
    print(i+1,",",text,",",url)    

4 總結

通過八天左右緊張而又充實的學習,自己也算對python的爬蟲有了瞭解(只敢說了解,不敢說掌握)。回顧一下:
通過task1瞭解了HTTP和網頁基礎以及api的使用,嘗試使用request-get爬取豆瓣電影top的信息;
通過task2瞭解了bs4這麼一個非常棒的html解析和提取的庫,以及匹配更高效的xpath方法和正則表達式方法,實戰了爬取丁香園-用戶名和回覆內容、淘寶商品比價定向爬蟲這兩個小項目;
通過task3瞭解了ip代理、session和cookie以及特別好用的selenuim(自動化測試工具),實戰了模擬登錄丁香園,並抓取論壇頁面所有的人員基本信息與回覆帖子內容;
task4通過小作業,實現了對前面所學知識的應用,通過自己的摸索實現了大作業的部分內容。
當然也有遺憾,爬取需要登錄網站出現驗證(按要求點圖上的漢字、按要求拖動位置)的部分無法模擬。以後有時間將繼續學習,歐力給。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章