【发布时间】:2021-11-19 23:04:10
【问题描述】:
我正在努力将这个网站的多页搜索结果抓取到一个格式整齐的 pandas 数据框中。
我已经概述了完成这项任务的步骤。
1.) 从我想要提取的每个结果中识别信息(3 件事)
2.) 将 3 件事中的所有信息提取到单独的列表中
3.) 通过 for 循环将列表中的项目附加到 pandas 数据帧中
这是我迄今为止尝试过的:
import requests
import pandas as pd
#!pip install bs4
from bs4 import BeautifulSoup as bs
url = 'https://www.federalregister.gov/documents/search?conditions%5Bpublication_date%5D%5Bgte%5D=08%2F28%2F2021&conditions%5Bterm%5D=economy'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
result = requests.get(url, headers=headers)
soup = bs(result.text, 'html.parser')
titles = soup.find_all('h5')
authors = soup.find_all('p')
#dates = soup.find_all('')
#append in for loop
data=[]
for i in range(2,22):
data.append(titles[i].text)
data.append(authors[i].text)
#data.append(dates[i].text)
data=pd.DataFrame()
在我将数据转换为 pandas 数据框之前,我可以看到结果,但最后一行基本上会删除结果。
另外,我不太确定如何遍历多个搜索结果页面。我找到了一些代码,可以让你选择一个开始和结束的网页进行迭代,如下所示:
URL = ['https://www.federalregister.gov/documents/search?conditions%5Bpublication_date%5D%5Bgte%5D=08%2F28%2F2021&conditions%5Bterm%5D=economy&page=2',
'https://www.federalregister.gov/documents/search?conditions%5Bpublication_date%5D%5Bgte%5D=08%2F28%2F2021&conditions%5Bterm%5D=economy&page=4']
for url in range(0,2):
req = requests.get(URL[url])
soup = bs(req.text, 'html.parser')
titles = soup.find_all('h5')
print(titles)
我在使用这种方法时遇到的问题是第一页的格式与所有其他页面的格式不同。从第二页开始,url 的结尾是“&page=2”。不知道如何解释。
总结一下我正在寻找的最终结果将是一个看起来像这样的数据框:
Title Author Date
Blah1 Agency1 09/23/2020
Blah2 Agency2 08/22/2018
Blah3 Agency3 06/02/2017
....
有人可以帮我指出正确的方向吗?非常迷失这个。
【问题讨论】:
标签: python pandas dataframe web-scraping beautifulsoup