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

關(guān)于文章《爬取知網(wǎng)文獻信息》中代碼的一些優(yōu)化

這篇具有很好參考價值的文章主要介紹了關(guān)于文章《爬取知網(wǎng)文獻信息》中代碼的一些優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

哈嘍大家好,我是咸魚

?

之前寫了一篇關(guān)于文獻爬蟲的文章Python爬蟲實戰(zhàn)(5) | 爬取知網(wǎng)文獻信息

?

文章發(fā)布之后有很多小伙伴給出了一些反饋和指正,在認真看了小伙伴們的留言之后,咸魚對代碼進行了一些優(yōu)化

?

優(yōu)化的代碼在文末,歡迎各位小伙伴給出意見和指正

?

問題

  • pycharm 設(shè)置 Edge 驅(qū)動器的環(huán)境報錯“module 'selenium.webdriver' has no attribute 'EdgeOptions”

如果瀏覽器驅(qū)動已經(jīng)下載,而放在了合適的位置(比如添加到環(huán)境變量里,或者放在了 python.exe 同級目錄中)

?

那就可能是因為你使用的是較老的版本,Edge的選項已經(jīng)被更新了。 建議更新 selenium 包以獲得最佳的Edge選項支持

?

可以通過以下命令更新 selenium,建議更新到 4.6 以上版本

pip install -U selenium

?

因為 selenium 4.6 版本之后內(nèi)置了一個組件:Selenium Manager

?

根據(jù)官網(wǎng)介紹,這個 Selenium Manager 可以幫助你獲得一個運行 Selenium 的開箱即用的環(huán)境

?

如果在 PATH 中沒有找到 Chrome、Firefox 和 Edge 的驅(qū)動,Selenium Manager的 Beta 1版將為它們配置。不需要額外的配置

?

這就意味著自己不需要再去下載安裝瀏覽器驅(qū)動

關(guān)于文章《爬取知網(wǎng)文獻信息》中代碼的一些優(yōu)化

?

中文文檔鏈接:

https://www.selenium.dev/zh-cn/documentation/webdriver/getting_started/install_drivers/

?

  • 只能爬取20倍數(shù)的文獻篇數(shù)

有位粉絲發(fā)現(xiàn)每次爬取都是爬取 20 倍數(shù)的文獻篇數(shù)(20、40、60)。假設(shè)要爬取 21 篇,但是卻爬到了 40 篇

?

排查的時候發(fā)現(xiàn)是代碼中的邏輯有一些 bug ,已經(jīng)優(yōu)化

?

  • 獲取不到網(wǎng)頁的 xpath 元素

第一種可能是網(wǎng)頁中的 xpath 元素并不是一成不變的,要參考自己的瀏覽器上的 Xpath。在我這可能是div[3],在你那可能就不是這個了,所以說需要自己先定位一遍

?

第二種可能是網(wǎng)頁加載太慢導(dǎo)致爬蟲爬取不到,這種情況的話可以增加等待超時時間

?

  • 關(guān)于網(wǎng)頁加載太慢導(dǎo)致程序爬取不到元素報超時異?;蛘咴夭淮嬖诋惓?/span>

我的代碼中用的都是顯示等待 + 強制等待結(jié)合的方式。如果還是不行,小伙伴們可以自行設(shè)置超時時間

?

優(yōu)化后代碼

關(guān)于文章《爬取知網(wǎng)文獻信息》中代碼的一些優(yōu)化

?

?

下面給出優(yōu)化后的源碼

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from urllib.parse import urljoin
?
?
def open_page(driver, theme):
    # 打開頁面
    driver.get("https://www.cnki.net")
?
    # 傳入關(guān)鍵字
    WebDriverWait(driver, 100).until(
        EC.presence_of_element_located((By.XPATH, '''//*[@id="txt_SearchText"]'''))).send_keys(theme)
?
    # 點擊搜索
    WebDriverWait(driver, 100).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div[2]/div[2]/div/div[1]/input[2]"))).click()
    time.sleep(3)
?
    # 點擊切換中文文獻
    WebDriverWait(driver, 100).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div[3]/div[1]/div/div/div/a[1]"))).click()
    time.sleep(3)
?
    # 獲取總文獻數(shù)和頁數(shù)
    res_unm = WebDriverWait(driver, 100).until(EC.presence_of_element_located(
        (By.XPATH, "/html/body/div[3]/div[2]/div[2]/div[2]/form/div/div[1]/div[1]/span[1]/em"))).text
?
    # 去除千分位里的逗號
    res_unm = int(res_unm.replace(",", ''))
    page_unm = int(res_unm / 20) + 1
    print(f"共找到 {res_unm} 條結(jié)果, {page_unm} 頁。")
    return res_unm
?
?
def crawl(driver, papers_need, theme):
    # 賦值序號, 控制爬取的文章數(shù)量
    count = 1
?
    # 當爬取數(shù)量小于需求時,循環(huán)網(wǎng)頁頁碼
    while count <= papers_need:
        # 等待加載完全,休眠3S
        time.sleep(3)
?
        title_list = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "fz14")))
        # 循環(huán)網(wǎng)頁一頁中的條目
        for i in range(len(title_list)):
            try:
                if (count % 20) != 0:
                    term = count % 20  # 本頁的第幾個條目
                else:
                    term = 20
                title_xpath = f"/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody/tr[{term}]/td[2]"
                author_xpath = f"/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody/tr[{term}]/td[3]"
                source_xpath = f"/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody/tr[{term}]/td[4]"
                date_xpath = f"/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody/tr[{term}]/td[5]"
                database_xpath = f"/html/body/div[3]/div[2]/div[2]/div[2]/form/div/table/tbody/tr[{term}]/td[6]"
                title = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, title_xpath))).text
                authors = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, author_xpath))).text
                source = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, source_xpath))).text
                date = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, date_xpath))).text
                database = WebDriverWait(driver, 10).until(
                    EC.presence_of_element_located((By.XPATH, database_xpath))).text
?
                # 點擊條目
                title_list[i].click()
?
                # 獲取driver的句柄
                n = driver.window_handles
?
                # driver切換至最新生產(chǎn)的頁面
                driver.switch_to.window(n[-1])
                time.sleep(3)
?
                # 開始獲取頁面信息
                title = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,"/html/body/div[2]/div[1]/div[3]/div/div/div[3]/div/h1"))).text
                authors = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH ,"/html/body/div[2]/div[1]/div[3]/div/div/div[3]/div/h3[1]"))).text
                institute = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
                    (By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div[3]/div/h3[2]"))).text
                abstract = WebDriverWait(driver, 10).until(
                    EC.presence_of_element_located((By.CLASS_NAME, "abstract-text"))).text
                try:
                    keywords = WebDriverWait(driver, 10).until(
                        EC.presence_of_element_located((By.CLASS_NAME, "keywords"))).text[:-1]
                    cssci = WebDriverWait(driver, 10).until(
                        EC.presence_of_element_located((By.XPATH, "/html/body/div[2]/div[1]/div[3]/div/div/div[1]/div[1]/a[2]"))).text
                except:
                    keywords = ''
                    cssci = 'NULL'
                url = driver.current_url
?
                res = f"{count}\t{title}\t{authors}\t{cssci}\t{institute}\t{date}\t{source}\t{database}\t{keywords}\t{abstract}\t{url}".replace(
                        "\n", "") + "\n"
                print(res)
                
                '''寫入文件,有需要的小伙伴可以去掉注釋'''
                # with open(f'CNKI_{theme}.tsv', 'a', encoding='gbk') as f:
                #     f.write(res)
?
            except:
                print(f" 第{count} 條爬取失敗\n")
                # 跳過本條,接著下一個
                continue
            finally:
                # 如果有多個窗口,關(guān)閉第二個窗口, 切換回主頁
                n2 = driver.window_handles
                if len(n2) > 1:
                    driver.close()
                    driver.switch_to.window(n2[0])
                # 爬完一篇計數(shù)加 1
                count += 1
?
                if count > papers_need:
                    break
                    
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[@id='PageNext']"))).click()
?
?
if __name__ == "__main__":
    print("開始爬??!")
?
    # get直接返回,不再等待界面加載完成
    desired_capabilities = DesiredCapabilities.CHROME
    desired_capabilities["pageLoadStrategy"] = "none"
?
    # 設(shè)置驅(qū)動器的環(huán)境
    options = webdriver.EdgeOptions()
?
    # 設(shè)置chrome不加載圖片,提高速度
    options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
?
    # 設(shè)置不顯示窗口
    options.add_argument('--headless')
?
    # 創(chuàng)建一個瀏覽器驅(qū)動器
    driver = webdriver.Edge(options=options)
?
    # 輸入需要搜索的主題
    # theme = input("請輸入你要搜索的期刊名稱:")
    theme = "python"
?
    # 設(shè)置所需篇數(shù)
    # papers_need = int(input("請輸入你要爬取篇數(shù):"))
    papers_need = 100
?
    res_unm = int(open_page(driver, theme))
?
    # 判斷所需是否大于總篇數(shù)
    papers_need = papers_need if (papers_need <= res_unm) else res_unm
    crawl(driver, papers_need, theme)
?
    print("爬取完畢!")
?
    # 關(guān)閉瀏覽器
    driver.close()
?
 

?文章來源地址http://www.zghlxwxcb.cn/news/detail-426708.html

到了這里,關(guān)于關(guān)于文章《爬取知網(wǎng)文獻信息》中代碼的一些優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 去除IDEA中代碼的波浪線(黃色警示線)

    去除IDEA中代碼的波浪線(黃色警示線)

    去除IDEA中代碼的波浪線 首先是點擊 File—Settings ?操作如下圖所示: 然后點擊 Editor—Inspections—General—Duplicated code fragment(去掉勾選)—Apply—OK ?即可,詳情請看下圖所示:

    2024年02月03日
    瀏覽(18)
  • 怎么使用Git查看項目中代碼的提交歷史記錄?

    怎么使用Git查看項目中代碼的提交歷史記錄?

    怎么使用Git查看項目中代碼的提交歷史記錄? 可以在git上使用下面這段指令 在git上執(zhí)行完之后,就可以在桌面上看到打印出來的日志文件了 Readme.log日志文件如下: 對指令中的代碼進行解釋: git log 是git導(dǎo)出指令 format 是需要導(dǎo)出的數(shù)據(jù)格式,這里是代碼提交時間、提交人員

    2024年02月12日
    瀏覽(37)
  • 關(guān)于工作中爬取網(wǎng)站的一些思路記錄

    關(guān)于工作中爬取網(wǎng)站的一些思路記錄

    聲明:只是因為工作中需要,且基本不會對別人的網(wǎng)站構(gòu)成什么不好的影響,做個思路記錄?。?! 尊重網(wǎng)站所有者、控制請求頻率、遵守網(wǎng)站規(guī)則、尊重個人隱私 平常工作中難免會遇到需要爬取別人網(wǎng)站的需求,例如爬取兌換之類的流程,把接口爬取下來封裝到項目中,這

    2024年02月07日
    瀏覽(25)
  • python爬蟲爬取微信公眾號的閱讀數(shù)、喜愛數(shù)、文章標題和鏈接等信息

    python爬蟲爬取微信公眾號的閱讀數(shù)、喜愛數(shù)、文章標題和鏈接等信息

    爬蟲的步驟: (1)申請自己的公眾號 (2)使用fiddler抓包工具 (3)pycharm (一)申請公眾號 官網(wǎng):微信公眾平臺 填入相關(guān)信息創(chuàng)建微信公眾號 進入公眾號界面如下: 找到新的創(chuàng)作-圖文信息 在彈出的界面中查找公眾號文章-輸入公眾號名稱-確定 點擊確認之后,進入公眾號

    2024年02月05日
    瀏覽(26)
  • 關(guān)于ES集群信息的一些查看

    關(guān)于ES集群信息的一些查看

    查看版本 kibana : GET / GET /_cat/nodes?v 解釋: ip:集群中節(jié)點的 ip 地址; heap.percent:堆內(nèi)存的占用百分比; ram.percent:總內(nèi)存的占用百分比,其實這個不是很準確,因為 buff/cache 和 available 也被當作使用內(nèi)存; cpu:cpu 占用百分比; load_1m:1 分鐘內(nèi) cpu 負載; load_5m:5 分鐘內(nèi)

    2023年04月11日
    瀏覽(26)
  • 關(guān)于信息學(xué)奧賽中的一些做題思路

    本文記錄了筆者在刷題或比賽中運用到的一些做題思路 可以 適當 參考 首先顯然有 (mathcal {O}(n^2)) 暴力 枚舉每個子段,然后選擇其中前k大的 那么可以發(fā)現(xiàn)有 貪心 策略: 選擇k次最大值 那么考慮怎樣求最大值 想到可以枚舉每個起始位置,想辦法計算從該位置開始符合要求

    2024年03月13日
    瀏覽(19)
  • 一些關(guān)于Aleo項目的誤解和常見的試錯信息

    在現(xiàn)實生活中,你不會因為買了一杯咖啡而被人知道你有多少財富,但在區(qū)塊鏈世界,你可能會因為在opensea上買了一個便宜的NFT而被人發(fā)現(xiàn)你的錢包地址、所有轉(zhuǎn)賬信息以及錢包里的所有財富。如果被不懷好意的人或一些惡意的黑客盯上,你可能就會受到攻擊,遭受很大的損

    2024年02月06日
    瀏覽(22)
  • Python scrapy爬取帶驗證碼的列表數(shù)據(jù)

    首先所需要的環(huán)境:(我用的是Python2的,可以選擇python3,具體遇到的問題自行解決,目前我這邊幾百萬的數(shù)據(jù)量爬?。?環(huán)境: 直接貼代碼具體需要注意的特殊顏色標出有注釋 pipelines存數(shù)據(jù)庫這個就不說了根據(jù)自己的業(yè)務(wù) 注:目前我網(wǎng)站驗證碼比較簡單可以直接使用pytess

    2024年01月18日
    瀏覽(15)
  • 關(guān)于嵌入式開發(fā)的一些信息匯總:嵌入式C開發(fā)人員、嵌入式系統(tǒng)Linux

    關(guān)于嵌入式開發(fā)的一些信息匯總:嵌入式C開發(fā)人員、嵌入式系統(tǒng)Linux

    這篇文章是關(guān)于嵌入式開發(fā)的一些基本信息,供想入行的人參考。有一些作者本人的想法,以及來自外網(wǎng)的大拿的文章翻譯而來,原文鏈接在此Learning Linux for embedded systems,再次感謝,支持原創(chuàng)。 普通C開發(fā)人員和嵌入式C開發(fā)人員之間的 基本區(qū)別在于 ,因為嵌入式C程序被設(shè)

    2024年02月03日
    瀏覽(129)
  • 爬取詩詞網(wǎng)站中的文章

    實戰(zhàn)準備:要爬取的url:https://www.shicimingju.com/book/sanguoyanyi.html 實戰(zhàn)要求:爬取詩詞名句網(wǎng)站中的三國演義文章,將每章的標題和內(nèi)容寫入自己的項目文件(sanguo.txt) (本次爬取使用bs4) *bas4知識梳理在博客中Python知識梳理中

    2024年02月08日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包