日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python爬虫为什么xpath路径正确却检索不到内容_中国知网爬虫

發布時間:2025/3/20 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫为什么xpath路径正确却检索不到内容_中国知网爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、知網介紹

提起中國知網,如果你曾經寫過論文,那么基本上都會與中國知網打交道,因為寫一篇論文必然面臨著各種查重,當然翟博士除外。但是,本次重點不在于寫論文跟查重上,而在于我們要爬取知網上一些論文的數據,什么樣的數據呢?我們舉一個例子來說,在知網上,搜索論文的方式有很多種,但是對于專業人士來說,一般都會使用高級檢索,因為直接去查找作者的話,容易查找到很多重名作者,所以我們本次的爬蟲也是使用了高級檢索(泛稱)的爬蟲,再具體就是專業檢索,有助于我們唯一定位到作者。

二、常規步驟—頁面分析

1.來到高級檢索頁面,以【AU=王長峰 AND FU=71271031】為例檢索,結果如下:

2.利用Xpath語法嘗試獲取這些數據,卻發現一無所獲。

3.按照常理來說,即使是動態網頁也可以利用Xpath語法提取到數據,只是在Python里面獲取不到而已,所以在這里存在我們所不知道的問題。

三、知網反爬蟲機制

常見的反爬蟲機制一般有兩種:

第一種是請求頭反爬蟲,這個也是最簡單的,如果你不給定請求頭,對方服務器就不會理你。需要設置的參數有User-Agent、Referer和Cookie。

第二種是動態網頁,利用Ajax技術使用js接口來傳遞數據。

毫無疑問,對于數據非常金貴的中國知網來說,肯定使用了以上兩種反爬方式,并且中國知網的js接口非常復雜,雖說復雜,但是只要你的內功要是足夠強的話,還是能夠分析得出來,但是對于不懂js以及web開發的朋友來說,這將是一個非常困難的事情,所以使用selenium來進行爬蟲將是一件相對來說比較容易的事情。

另外,知網也不是僅僅只有這兩層反爬蟲機制,還有第三層,那就是iframe,由于很多朋友并沒有做過網站開發,所以不太清楚了這是什么東西,導致即使發現自己的Xpath語法正確,也無法正確獲取數據,從而懷疑人生,實際上,iframe比較常見的一種反爬蟲機制,不過,如果你不知道這個東西,那么你就基本上無緣爬取中國知網了。

四、什么是iframe?

了解iframe前,你首先得知道一個網頁是什么,沒錯,一個網頁就是一個html頁面。接下來我們從感性和源碼兩個方面來認識一下iframe.

1.感性認知。

一句話:一個完整的網頁內部又嵌套了多個完整的網頁,嵌套的頁面就叫做iframe。

2.網頁源碼認識。

比如一個非常簡單的html頁面(如下圖所示),一個html頁面是擁有一個完整的html標簽的,也就是起始html【】和閉合html【】,而iframe則是在這一個完整的html標簽里面又嵌套了一個完整的html標簽。

<html><body><p>Python伊甸園p>body>html>

3.看一下中國知網的源碼,發現果然存在一個iframe,所以這個就是中國知網的第三種反爬蟲機制。

五、最后給出中國知網的爬蟲

1.ways.py

import pandas as pd#AU=王長峰 AND FU=71271031def get_data(): data_list = pd.read_excel(r"C:\Users\wwb\Desktop\科學基金.xls", encoding='utf8') leaders = data_list.leader.values.tolist() codes = data_list.code.tolist() results = [] for leader,code in zip(leaders,codes): result = "AU={} AND FU={}".format(leader,code) results.append(result) return results

2.main.py

from selenium import webdriverfrom lxml import etreeimport timefrom ways import get_dataimport randomdef pasre_page(driver): html = etree.HTML(driver.page_source) trs = html.xpath('//tr[@bgcolor]') for tr in trs: title = tr.xpath('./td//a[@]/text()')[0] authors = tr.xpath('./td[@]/a[@]//text()') authors = "|".join(authors) source = tr.xpath('./td//a[@target="_blank"]/text()')[1] times = tr.xpath('./td[@align="center"]/text()')[0].strip() database = tr.xpath('./td[@align="center"]/text()')[1].strip() counted = tr.xpath('./td//span[@]/a/text()') if len(counted) == 0: counted = 0 else: counted = counted[0] downloadCount = tr.xpath('./td//span[@]/a/text()') if len(downloadCount) == 0: downloadCount = 0 else: downloadCount = downloadCount[0] data = { "title":title, "authors":authors, "source":source, "times":times, "database":database, "counted":counted, "downloadCount":downloadCount, } datas.append(data) print(title) time.sleep(random.uniform(2,4)) driver.switch_to.parent_frame() search_win = driver.find_element_by_id('expertvalue') search_win.clear() time.sleep(random.uniform(2,4)) driver_path = r"C:\Users\wwb\Desktop\chromedriver.exe"driver = webdriver.Chrome(executable_path=driver_path)url = "https://www.cnki.net/"driver.get(url)home_page = driver.find_element_by_id('highSearch')home_page.click()driver.switch_to_window(driver.window_handles[1])search_page = driver.find_element_by_id('1_3')search_page.click()datas = []results = get_data()for result in results: search_win = driver.find_element_by_id('expertvalue') search_win.send_keys(result) search_btn = driver.find_element_by_id('btnSearch') search_btn.click() iframe = driver.find_element_by_id('iframeResult') driver.switch_to.frame(iframe) time.sleep(random.uniform(2,4)) pasre_page(driver)

3.部分結果展示:


Python伊甸園qq交流總群:725962878,有興趣大家一塊兒交流Python知識。


微信公眾號:Python伊甸園

總結

以上是生活随笔為你收集整理的python爬虫为什么xpath路径正确却检索不到内容_中国知网爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。