выдает данные о веб-очистке и создании фрейма данных в Pandas (вероятно, простой ответ) - PullRequest
0 голосов
/ 19 мая 2019

Я работаю в Интернете с аннотациями pubmed.gov, и хотя я могу получить необходимые данные и распечатать их, я не могу экспортировать их в экспорт Python Pandas.По какой-то причине я получаю первый результат только при экспорте в файл Excel.Я ценю любую помощь!Итак, мой вопрос: почему я получаю только первый URL и реферат и как мне настроить свой код, чтобы получить все?Мой код показан ниже:

 from bs4 import BeautifulSoup
 from urllib.request import urlopen
 import requests
 import pandas as pd

 abstracturllist = ['https://www.ncbi.nlm.nih.gov/pubmed/31098966', 
'https://www.ncbi.nlm.nih.gov/pubmed/31067303', 
'https://www.ncbi.nlm.nih.gov/pubmed/31045693']

 for th in abstracturllist:

      response = requests.get(th)
      soup = BeautifulSoup(response.content, 'html.parser')
      x = soup.select('div.abstr')[0].prettify()
      data = {'URL':[th],'abstract':[x]}
      df = pd.DataFrame(data)
      df.to_excel('URLsandAbstracts.xlsx')

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Проблема в том, что вы перезаписываете свой словарь данных каждый раз, когда делаете цикл в списке.Вот один из способов исправить это:

from bs4 import BeautifulSoup
from urllib.request import urlopen
import requests
import pandas as pd

abstracturllist = ['https://www.ncbi.nlm.nih.gov/pubmed/31098966', 
'https://www.ncbi.nlm.nih.gov/pubmed/31067303', 
'https://www.ncbi.nlm.nih.gov/pubmed/31045693']

abstract_list=[] #create list for data

for th in abstracturllist:

    response = requests.get(th)
    soup = BeautifulSoup(response.content, 'html.parser')
    x = soup.select('div.abstr')[0].prettify()    
    data = {'URL':[th],'abstract':[x]}

    abstract_list.append(data)

    df = pd.DataFrame(abslist)
    df.to_excel('URLsandAbstracts.xlsx')
1 голос
/ 19 мая 2019

Создать новый list, в цикле добавить вывод и список последних проходов словаря в DataFrame конструктор:

out = []
for th in abstracturllist:

      response = requests.get(th)
      soup = BeautifulSoup(response.content, 'html.parser')
      #parse only abstract text from element <p></p>
      x = soup.select('div.abstr p')[0].text
      data = {'URL':th,'abstract':x}
      out.append(data)
df = pd.DataFrame(out)
print (df)
                                            URL  \
0  https://www.ncbi.nlm.nih.gov/pubmed/31098966   
1  https://www.ncbi.nlm.nih.gov/pubmed/31067303   
2  https://www.ncbi.nlm.nih.gov/pubmed/31045693   

                                            abstract  
0  Delivering well-coordinated care is essential ...  
1  The proportion of Hispanics in the U.S. Vetera...  
2  VA and Medicare use among older Veterans has b...  

df.to_excel('URLsandAbstracts.xlsx')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...