簡體   English   中英

使用 bs4 抓取 PubMed

[英]Scraping PubMed using bs4

我有一個 PubMed id 的數據集(一個 CSV 文件),我需要對其進行迭代,並為每個獲取標題、出版年份、摘要和 MeSH 術語,然后我需要將其保存到具有以下格式的 CSV 文件中:

id year_published title abstract mesh_terms     

其中每個項目都在一個不同的、單獨的列中。 我嘗試使用 bs4 來做到這一點並寫了這個:

import urllib2
from bs4 import BeautifulSoup
import csv

CSVfile = open('srData.csv')
fileReader = csv.reader(CSVfile)
Data = list(fileReader)
i = 0

with open('blank.csv','wb') as f1:
 writer=csv.writer(f1, delimiter='\t',lineterminator='\n',)
 for id in Data:
    try:
        soup = BeautifulSoup(urllib2.urlopen("http://www.ncbi.nlm.nih.gov/pubmed/" & id).read())
        jouryear = soup.find_all(attrs={"class": "cit"})
        year = jouryear[0].get_text()
        yearlength = len(year)
        titleend = year.find(".")
        year1 = titleend+2
        year2 = year1+1
        year3 = year2+1
        year4 = year3+1
        year5 = year4+1
        published_date = (year[year1:year5])

        title = soup.find_all(attrs={"class": "rprt abstract"})
        title = (title[0].h1.string)

        abstract = (soup.find_all(attrs={"class": "abstr"}))
        abstract = (abstract[0].p.string)
        writer.writerow([id, published_date, title, abstract])
    except:
        writer.writerow([id, "error"])
        print (id)
    i = i+1
    print i

但是,這會引發關於將列表附加到 URL 的錯誤。 我該如何解決這個問題。

CSVfile = open('srData.csv')
fileReader = csv.reader(CSVfile)
Data = list(fileReader)

在這些行之后, Data是一個列表列表。 每個子列表是 CSV 的一行/一行。 這意味着當你迭代它時:

for id in Data:

你每次都會得到一個清單。 而是說:

for row in Data:
    id = row[0]

還有"http://www.ncbi.nlm.nih.gov/pubmed/" & id絕對是錯誤的。 使用+ ,而不是&

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM