国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例

這篇具有很好參考價(jià)值的文章主要介紹了selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例

前言

本程序致力于實(shí)現(xiàn)以下目標(biāo):
(1)爬取澎湃新聞關(guān)于“反腐”的全部文章內(nèi)容;
(2)按標(biāo)題、鏈接將其整理到excel中;
(3)將標(biāo)題和文章整合到一個(gè)word文檔中。
許久沒(méi)有正經(jīng)寫(xiě)過(guò)了,有些生疏,代碼耦合度蠻高的,所幸目標(biāo)達(dá)成了。

需要導(dǎo)入的包

import time
import docx
import xlwt
from docx.oxml.ns import qn
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

需要避雷的點(diǎn)

webdriver的版本要與瀏覽器一致

如果用的是google chrome,可以在這里找到新版本的driver;
其他瀏覽器的話(huà)直接百度就能找到。

如果使用爬蟲(chóng)打開(kāi)了新網(wǎng)頁(yè),要記得跳轉(zhuǎn)

一開(kāi)始不知道這一點(diǎn),試了半天都定位不到要爬取的元素,結(jié)果最后發(fā)現(xiàn)一直沒(méi)跳轉(zhuǎn)到第二個(gè)頁(yè)面上,那在第一個(gè)頁(yè)面上當(dāng)然定位不到了……跳轉(zhuǎn)的代碼如下:

new_window = driver.window_handles[1]  #找第二個(gè)窗口
driver.switch_to.window(new_window) #切換到新窗口
driver.refresh()    #刷新

XPath和selector都可以直接復(fù)制

復(fù)制過(guò)程如下圖所示,比自己寫(xiě)方便多了。
selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例,瞎搞,selenium,爬蟲(chóng),測(cè)試工具

爬取多網(wǎng)頁(yè)時(shí)記得try

比如這次爬取的澎湃新聞的文章,有些鏈接點(diǎn)進(jìn)去是視頻,是我們所不需要的,定位的位置也不一樣,極有可能會(huì)報(bào)錯(cuò)中斷。這時(shí),就需要try-except語(yǔ)句來(lái)幫助我們跳過(guò)了。

try:
	x_path="http://main/div[4]/div[1]/div[1]/div/h1"
    title=driver.find_element(By.XPATH, x_path)
    x_path = "http://main/div[4]/div[1]/div[1]/div/div[2]"
    article=driver.find_element(By.XPATH, x_path)
    print(title.text)
    print(article.text)
    file.add_paragraph(article.text)
except:
    print("非文字")

打入word時(shí)調(diào)整字體的問(wèn)題

具體程序如下:

for para in file.paragraphs:
    for run in para.runs:
        run.font.size = docx.shared.Pt(10)  #設(shè)置字體大小為10
        run.font.name = 'Times New Roman' #英文
        run._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷體') # 中文

值得注意的是,中文的字體前面最好加一個(gè)u,而且qn需要單獨(dú)導(dǎo)包:

from docx.oxml.ns import qn

完整程序

import time
import docx
import xlwt
from docx.oxml.ns import qn
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
def main():
    driver = webdriver.Edge()
    driver.get("https://www.thepaper.cn/")
    time.sleep(1)
    search=driver.find_element(By.TAG_NAME,'input')
    search.send_keys("反腐")
    time.sleep(1)
    x_path="http://main/div/div/div/div/div/div/div/span"
    send_button=driver.find_element(By.XPATH,x_path)
    ActionChains(driver).move_to_element(send_button).click(send_button).perform()
    time.sleep(1)
    x_path="http://main/div[3]/div[1]/div/div[2]/div/ul/li[2]"
    send_button=driver.find_element(By.XPATH,x_path)
    ActionChains(driver).move_to_element(send_button).click(send_button).perform()
    time.sleep(1)

    last_height = driver.execute_script("return document.body.scrollHeight")  # 獲取當(dāng)前頁(yè)面的高度
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:  # 模擬下拉操作,直到滑動(dòng)到底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  # 模擬下拉操作
        time.sleep(2)  # 等待頁(yè)面加載
        new_height = driver.execute_script("return document.body.scrollHeight")  # 獲取當(dāng)前頁(yè)面的高度
        if new_height == last_height:  # 判斷是否已經(jīng)到達(dá)頁(yè)面底部
            break
        last_height = new_height

    x_path="http://main/div[3]/div[1]/div/div/div/ul/li/div/a"
    names=driver.find_elements(By.XPATH,x_path)
    name_text=[]
    name_href=[]
    num=-1
    for name in names:
        name_text.append(name.text)
        name_href.append(name.get_attribute("href"))
        num=num+1
        print(name.text)
        print(name.get_attribute("href"))

    file=docx.Document()    #創(chuàng)建docx對(duì)象

    workbook = xlwt.Workbook()
    sheet1 = workbook.add_sheet('sheet1', cell_overwrite_ok=True)
    sheet1.write(0,0,'標(biāo)題')
    sheet1.write(0,1,'鏈接')

    for i in range(num+1):
        print(name_text[i])
        print(name_href[i])
        address=name_href[i]
        driver.get(address)
        file.add_paragraph(name_text[i])
        sheet1.write(i+1,0,name_text[i])
        sheet1.write(i + 1, 1, name_href[i])
        try:
            x_path="http://main/div[4]/div[1]/div[1]/div/h1"
            title=driver.find_element(By.XPATH, x_path)
            x_path = "http://main/div[4]/div[1]/div[1]/div/div[2]"
            article=driver.find_element(By.XPATH, x_path)
            print(title.text)
            print(article.text)
            file.add_paragraph(article.text)
        except:
            print("非文字")
    for para in file.paragraphs:
        for run in para.runs:
            run.font.size = docx.shared.Pt(10)  #設(shè)置字體大小為10
            run.font.name = 'Times New Roman' #英文
            run._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷體') # 中文
    file.save("crawlerResult.docx")

    workbook.save('./crawlerResult.xls')

if __name__=='__main__':
    main()

擴(kuò)展

現(xiàn)將功能擴(kuò)展如下:
(1)爬取分別以“反腐”,“從嚴(yán)治黨”,“廉潔”,三個(gè)關(guān)鍵詞搜索的文章內(nèi)容并存儲(chǔ);
(2)只保留不重復(fù)的部分。
為實(shí)現(xiàn)該功能,需要一個(gè)字典,來(lái)判斷該文章是否已經(jīng)被搜索過(guò):

dict={} #記錄是否重復(fù)的字典
names=driver.find_elements(By.XPATH,x_path)
for name in names:
    if name.text not in dict:
        name_text.append(name.text)
        name_href.append(name.get_attribute("href"))
        num=num+1
        print(name.text)
        print(name.get_attribute("href"))
        dict[name.text]=1

另外發(fā)現(xiàn),爬取過(guò)程中可能出現(xiàn)某網(wǎng)址已經(jīng)失效的情況,在這種情況下需要跳過(guò),否則程序也會(huì)因執(zhí)行不下去而異常結(jié)束,此處使用try-except處理:

try:
    address=name_href[i]
    driver.get(address)
except:
    print("網(wǎng)址失效")

擴(kuò)展之后的程序如下:

import time
import docx
import xlwt
from docx.oxml.ns import qn
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
def main():
    search_word=['反腐','從嚴(yán)治黨','廉潔']
    search_word_len=search_word.__len__()
    dict={} #記錄是否重復(fù)的字典
    num = -1    #記錄標(biāo)題數(shù)
    search_word_num=0   #搜索到第幾個(gè)詞
    name_text = []
    name_href = []
    for word in search_word:
        search_word_num=search_word_num+1
        driver = webdriver.Edge()
        driver.get("https://www.thepaper.cn/")
        time.sleep(1)
        search=driver.find_element(By.TAG_NAME,'input')
        #print(word)
        search.send_keys(word)
        time.sleep(1)
        x_path="http://main/div/div/div/div/div/div/div/span"
        send_button=driver.find_element(By.XPATH,x_path)
        ActionChains(driver).move_to_element(send_button).click(send_button).perform()
        time.sleep(1)
        x_path="http://main/div[3]/div[1]/div/div[2]/div/ul/li[2]"
        send_button=driver.find_element(By.XPATH,x_path)
        ActionChains(driver).move_to_element(send_button).click(send_button).perform()
        time.sleep(1)

        last_height = driver.execute_script("return document.body.scrollHeight")  # 獲取當(dāng)前頁(yè)面的高度
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")
        last_height = driver.execute_script("return document.body.scrollHeight")

        while True:  # 模擬下拉操作,直到滑動(dòng)到底部
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  # 模擬下拉操作
            time.sleep(2)  # 等待頁(yè)面加載
            new_height = driver.execute_script("return document.body.scrollHeight")  # 獲取當(dāng)前頁(yè)面的高度
            if new_height == last_height:  # 判斷是否已經(jīng)到達(dá)頁(yè)面底部
                break
            last_height = new_height

        x_path="http://main/div[3]/div[1]/div/div/div/ul/li/div/a"
        names=driver.find_elements(By.XPATH,x_path)
        for name in names:
            if name.text not in dict:
                name_text.append(name.text)
                name_href.append(name.get_attribute("href"))
                num=num+1
                print(name.text)
                print(name.get_attribute("href"))
                dict[name.text]=1
        if search_word_num == search_word_len:

            file=docx.Document()    #創(chuàng)建docx對(duì)象

            workbook = xlwt.Workbook()
            sheet1 = workbook.add_sheet('sheet1', cell_overwrite_ok=True)
            sheet1.write(0,0,'標(biāo)題')
            sheet1.write(0,1,'鏈接')
            for i in range(num+1):
                print(name_text[i])
                print(name_href[i])
                try:
                    address=name_href[i]
                    driver.get(address)
                except:
                    print("網(wǎng)址失效")
                file.add_paragraph(name_text[i])
                sheet1.write(i+1,0,name_text[i])
                sheet1.write(i + 1, 1, name_href[i])
                try:
                    x_path="http://main/div[4]/div[1]/div[1]/div/h1"
                    title=driver.find_element(By.XPATH, x_path)
                    x_path = "http://main/div[4]/div[1]/div[1]/div/div[2]"
                    article=driver.find_element(By.XPATH, x_path)
                    print(title.text)
                    print(article.text)
                    file.add_paragraph(article.text)
                except:
                    print("非文字")
            for para in file.paragraphs:
                for run in para.runs:
                    run.font.size = docx.shared.Pt(10)  #設(shè)置字體大小為10
                    run.font.name = 'Times New Roman' #英文
                    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷體') # 中文
            file.save("crawlerResult.docx")

            workbook.save('./crawlerResult.xls')
        else:
            driver.close()
    print(dict.keys())
if __name__=='__main__':
    main()

爬取效果

word共2203頁(yè)324萬(wàn)字
selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例,瞎搞,selenium,爬蟲(chóng),測(cè)試工具
excel共1768行(1767個(gè)文章標(biāo)題,第一行為表頭)
selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例,瞎搞,selenium,爬蟲(chóng),測(cè)試工具文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741229.html

到了這里,關(guān)于selenium爬蟲(chóng)——以爬取澎湃新聞某搜索結(jié)果為例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【爬蟲(chóng)實(shí)戰(zhàn)】用python爬取微博任意關(guān)鍵詞搜索結(jié)果、exe文件

    【爬蟲(chóng)實(shí)戰(zhàn)】用python爬取微博任意關(guān)鍵詞搜索結(jié)果、exe文件

    項(xiàng)目功能簡(jiǎn)介: 1.交互式配置; 2.兩種任意來(lái)源(直接輸入、本地文件); 3.自動(dòng)翻頁(yè)(無(wú)限爬取); 4.指定最大翻頁(yè)頁(yè)碼; 5.數(shù)據(jù)保存到csv文件; 6.程序支持打包成exe文件; 7.項(xiàng)目操作說(shuō)明文檔; 一.最終效果 視頻演示: 用python爬取微博搜索結(jié)果、exe文件

    2024年02月02日
    瀏覽(28)
  • (已解決)關(guān)鍵詞爬取百度搜索結(jié)果,返回百度安全驗(yàn)證,網(wǎng)絡(luò)不給力,請(qǐng)稍后重試,無(wú)法請(qǐng)求到正確數(shù)據(jù)的問(wèn)題

    (已解決)關(guān)鍵詞爬取百度搜索結(jié)果,返回百度安全驗(yàn)證,網(wǎng)絡(luò)不給力,請(qǐng)稍后重試,無(wú)法請(qǐng)求到正確數(shù)據(jù)的問(wèn)題

    已解決,使用進(jìn)行百度搜索,然后爬取搜索結(jié)果,請(qǐng)求數(shù)據(jù)后,返回的是百度安全驗(yàn)證,網(wǎng)絡(luò)不給力,請(qǐng)稍后重試。無(wú)法請(qǐng)求到正確數(shù)據(jù)。且嘗試在header中增加Accept參數(shù)還是不行。 ? ? ?在學(xué)習(xí)過(guò)程中,寫(xiě)了一小段練習(xí)用的爬取程序,獲取百度搜索后的結(jié)果,代

    2024年02月08日
    瀏覽(31)
  • (已解決)關(guān)鍵詞爬取百度搜索結(jié)果,返回百度安全驗(yàn)證,網(wǎng)絡(luò)不給力,請(qǐng)稍后重試,無(wú)法請(qǐng)求到正確數(shù)據(jù)的問(wèn)題(2023最新)

    (已解決)關(guān)鍵詞爬取百度搜索結(jié)果,返回百度安全驗(yàn)證,網(wǎng)絡(luò)不給力,請(qǐng)稍后重試,無(wú)法請(qǐng)求到正確數(shù)據(jù)的問(wèn)題(2023最新)

    已解決,使用進(jìn)行百度搜索,然后爬取搜索結(jié)果,請(qǐng)求數(shù)據(jù)后,返回的是百度安全驗(yàn)證,網(wǎng)絡(luò)不給力,請(qǐng)稍后重試。無(wú)法請(qǐng)求到正確數(shù)據(jù)。且嘗試在header中增加Accept參數(shù)還是不行。 ? ? ?在學(xué)習(xí)過(guò)程中,寫(xiě)了一小段練習(xí)用的爬取程序,獲取百度搜索后的結(jié)果,代

    2024年02月17日
    瀏覽(27)
  • 爬蟲(chóng)機(jī)試題-爬取新聞網(wǎng)站

    爬蟲(chóng)機(jī)試題-爬取新聞網(wǎng)站

    之前投簡(jiǎn)歷時(shí)遇到了這樣的一個(gè)筆試。本以為會(huì)是數(shù)據(jù)結(jié)構(gòu)算法之類(lèi)的沒(méi)想到直接發(fā)了一個(gè)word直接提需求,感覺(jué)挺有意思就寫(xiě)了這篇文章,感興趣的朋友可以看看。 通過(guò)分析頁(yè)面結(jié)構(gòu)我們得以知道,這個(gè)頁(yè)面本身沒(méi)有新聞信息,是由js代碼執(zhí)行后才將信息插入到html中的,因

    2024年04月25日
    瀏覽(21)
  • Python爬蟲(chóng)實(shí)戰(zhàn)——爬取新聞數(shù)據(jù)(簡(jiǎn)單的深度爬蟲(chóng))

    Python爬蟲(chóng)實(shí)戰(zhàn)——爬取新聞數(shù)據(jù)(簡(jiǎn)單的深度爬蟲(chóng))

    ? ? ? ? 又到了爬新聞的環(huán)節(jié)(好像學(xué)爬蟲(chóng)都要去爬爬新聞,沒(méi)辦法誰(shuí)讓新聞一般都很好爬呢XD,拿來(lái)練練手),只作為技術(shù)分享,這一次要的數(shù)據(jù)是分在了兩個(gè)界面,所以試一下深度爬蟲(chóng),不過(guò)是很簡(jiǎn)單的。 ?網(wǎng)頁(yè)url 1.先看看網(wǎng)站網(wǎng)址的規(guī)律 ?發(fā)現(xiàn)這部分就是每一天的新聞

    2024年02月11日
    瀏覽(20)
  • python爬蟲(chóng)實(shí)戰(zhàn)(1)--爬取新聞數(shù)據(jù)

    python爬蟲(chóng)實(shí)戰(zhàn)(1)--爬取新聞數(shù)據(jù)

    想要每天看到新聞數(shù)據(jù)又不想占用太多時(shí)間去整理,萌生自己抓取新聞網(wǎng)站的想法。 使用python語(yǔ)言可以快速實(shí)現(xiàn),調(diào)用 BeautifulSoup 包里面的方法 安裝BeautifulSoup 完成以后引入項(xiàng)目 定義請(qǐng)求頭,方便把請(qǐng)求包裝成正常的用戶(hù)請(qǐng)求,防止被拒絕 定義被抓取的url,并請(qǐng)求加上請(qǐng)求

    2024年02月13日
    瀏覽(31)
  • selenium-java web自動(dòng)化測(cè)試工具抓取百度搜索結(jié)果實(shí)例

    selenium-java web自動(dòng)化測(cè)試工具抓取百度搜索結(jié)果實(shí)例

    ??? 交流討論: 歡迎加入我們一起學(xué)習(xí)! ?? 資源分享 : 耗時(shí)200+小時(shí)精選的「軟件測(cè)試」資料包 ??? 教程推薦: 火遍全網(wǎng)的《軟件測(cè)試》教程?? ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)指正! selenium-java web自動(dòng)化測(cè)試工具抓取百度搜索結(jié)果實(shí)例 這種方式抓百度

    2024年03月14日
    瀏覽(25)
  • 澎湃新聞對(duì)話(huà)騰訊丁珂:從“治已病”到“治未病”,企業(yè)需快速構(gòu)建“安全免疫力”

    澎湃新聞對(duì)話(huà)騰訊丁珂:從“治已病”到“治未病”,企業(yè)需快速構(gòu)建“安全免疫力”

    作者:澎湃新聞?dòng)浾?周頔 隨著數(shù)字化進(jìn)程加快,企業(yè)數(shù)字化體系的邊界在不斷拓展,安全風(fēng)險(xiǎn)和挑戰(zhàn)不斷增加,傳統(tǒng)被動(dòng)防御的安全應(yīng)對(duì)常顯疲態(tài),數(shù)字安全時(shí)代亟待建立全新的安全范式。 6月13日,騰訊安全聯(lián)合IDC等多家機(jī)構(gòu)在北京舉辦研討論壇,并發(fā)布“數(shù)字安全免疫力

    2024年02月11日
    瀏覽(20)
  • 【爬蟲(chóng)】5.5 Selenium 爬取Ajax網(wǎng)頁(yè)數(shù)據(jù)

    【爬蟲(chóng)】5.5 Selenium 爬取Ajax網(wǎng)頁(yè)數(shù)據(jù)

    目錄 ? AJAX 簡(jiǎn)介 任務(wù)目標(biāo) 創(chuàng)建Ajax網(wǎng)站 創(chuàng)建服務(wù)器程序 編寫(xiě)爬蟲(chóng)程序 ????????AJAX(Asynchronous JavaScript And XML,異步 JavaScript 及 XML) Asynchronous 一種創(chuàng)建 交互式 、 快速動(dòng)態(tài) 網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù) 通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下

    2024年02月10日
    瀏覽(51)
  • selenium爬蟲(chóng)框架爬取某壁紙網(wǎng)站

    selenium爬蟲(chóng)框架爬取某壁紙網(wǎng)站

    基礎(chǔ)知識(shí) 環(huán)境配置 開(kāi)始爬蟲(chóng) 簡(jiǎn)單分析目標(biāo)網(wǎng)站 寫(xiě)函數(shù) 獲取瀏覽器對(duì)象: 下載每一張圖片: 獲取每一頁(yè)的源代碼: 運(yùn)行print_result_every_page python基礎(chǔ)語(yǔ)法 面向?qū)ο蠡A(chǔ) html基礎(chǔ) xpath基礎(chǔ) selenium框架的基本使用 request庫(kù) lxml庫(kù) ? ? ?3.安裝瀏覽器xpath插件 ? ? ? ? 打開(kāi)谷歌瀏覽

    2024年02月05日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包