[python][project][爬蟲] 論文抓取

本文總結了在特定網頁上抓取論文的方法。


首先,需求是在以下四個期刊上抓取所有論文列表,找出含有關鍵字的論文。

期刊1:https://www.osapublishing.org/ol/issue.cfm

期刊2:https://www.osapublishing.org/oe/issue.cfm

期刊3:http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=22

期刊4:http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=50

項目的實現,採用QT Designer+python來實現,將抓取到的論文列表放到listWidget中,並將含有關鍵字的item改變顏色,雙擊item可以查看詳細信息,並提供論文下載鏈接。


QT Designer的設計如下:

【主頁面】和【雙擊item之後】




打開網頁可以觀察到期刊1和2是一個類型,期刊3和4是一個類型。

對於第一種類型,抓取方法如下:

# 設置headers
headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'}
soup = BeautifulSoup(requests.get(url,headers=headers).content, 'html.parser')
#抓取期刊信息
letter_info = soup.find('div', attrs={'class': 'content-module journal-info'})
# 期刊主要作者
primary_editors = letter_info.find('p', attrs={'class': 'primary-editors'}).get_text().strip()
# 期刊其他信息
letter_others_info = letter_info.find('h2').get_text().strip().replace('\n', '..')
letter_others_info = ''.join(letter_others_info.split())
#論文提取
letter_list= soup.find_all('div', attrs={'class': 'media-twbs-body'})
for letter in letter_list:
    #將論文存入字典中,key爲論文題目,value爲作者、html鏈接、pdf鏈接組成的list
    letters_list[letter.find('p', attrs={'class': 'article-title'}).get_text()]=[letter.find('p', attrs={'class': 'article-authors'}).get_text(),'https://www.osapublishing.org'+letter.find('a', attrs={'id': 'link-full'})['href'],'https://www.osapublishing.org'+letter.find('a', attrs={'id': 'link-pdf'})['href']]

對於第二種類型,抓取方法同理,只是需要找到代碼的規律:

headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'}
soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
letters=soup.find('ul',attrs={'class': 'results'}).find_all('li')
for letter in letters:
    authors=''
    for author in letter.find_all('a',attrs={'class': 'authorPreferredName prefNameLink'}):
        authors=authors+author.get_text()+';'
    authors=''.join(authors.split())
    title=letter.find('a',attrs={'class': 'art-abs-url'}).get_text().replace('\n','')
    letters_list[title]=[authors,'http://ieeexplore.ieee.org'+letter.find('img',attrs={'alt': 'HTML icon'}).parent['href'],'http://ieeexplore.ieee.org'+letter.find('img',attrs={'alt': 'PDF file icon'}).parent['href']]

抓取到的數據,放置在listWidget中,並匹配關鍵字,對含有關鍵字的item標記爲紅色:

#獲取關鍵字的內容
filter=str(self.plainTextEdit.toPlainText())
for key in letters_list:
#將字典的key設置爲item,添加到listWidgt中
    self.listWidget.addItem(key)
    if filter in key:
    #判斷key值是否包含關鍵字,並設置顏色
        self.listWidget.item(self.listWidget.count()-1).setTextColor(QColor(225, 0, 0))


另外點擊查看html,pdf可以查看原文鏈接和下載pdf:

#打開瀏覽器
webbrowser.open(url, new=0, autoraise=True)









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章