Python簡單網絡爬蟲實戰—下載論文名稱,作者信息(下)


Python簡單網絡爬蟲實戰—下載論文名稱,作者信息(上)中,學會了get到網頁內容以及在谷歌瀏覽器找到了需要提取的內容的數據結構,接下來記錄我是如何找到所有author和title的

1.從soup中get到data類

soup中提供了select方法來篩選所需的類。該方法使用方法如下:

articlename = soup.select('title')

該語句即將soup中所有的title元素放到articlename中。select也有其他用法

articlename = soup.select('.data') #類前面要加"."
articlename = soup.select('#username')#ID這種唯一的元素,前加"#"
articlename = soup.select('.publ-list .entry.editor .data')#可以組合查找,publ-list類下面的entry.editor類下面的data類,按次序用空格隔開
articlename = soup.select('.publ-list .entry.editor .data .title')[0].contents[0]#title類中第一個元素的第一個文本內容

我們用如下語句get到該網頁中所有的data類,這樣就包含了所有的author和title,去除了網頁中其他無關的元素,離目標更近了一步

soup.select('.publ-list .entry.inproceedings .data')

 

2.data類中篩選所有author與title

這是一個data類的所有內容。

其中author元素還有更下一級的結構

可以看到,一個data類中author和title元素並不是緊密連接的,在每個authro行之間,有“,”和“:”行隔開,在title行下方,還有dataPublished、genre等元素,但下方的元素都是固定的,行數也固定。因此我把一個.data描述為如下的多維數組:

[
[author1,url,name       ]
[","                    ]
[author2,url,name       ]
[":"                    ]
[<br>                   ]
[title,name             ]
["datePublished",content]
[</article>             ]
]

由於作者數量不固定,因此還要計算作者數量。因為每個author元素后面都會跟一個標點符號,因此似乎只要計算data類的長度減去4,再除以2就可以得到作者數量,然而在實際操作中發現,應該減去5。直到現在我也沒有明白原因,可能這里需要補充HTML網站相關的知識

authornum = int((len(articles)-5)/2)

得到了作者數量,就很容易定位到作者所在的行(下標)和title所在的行(下標)

觀察元素內容可以看到,authorname和titlename都是唯一的文本,用以下命令獲取即可

for i in range(0,authornum):
    authorlist.append(str(articles.contents[i*2].get_text()))
articlename = str(articles.contents[(authornum+1)*2].get_text())

 至此,該腳本的所有難點都搞定啦,接下來就水到渠成,理一下邏輯就ok啦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM