我是python的新手(三天),我偶然发现了一个我无法用google / youtube解决的问题。我想抓取National Governors Association获取所有美国州长的背景数据并将其保存到csv文件中。
我已经设法清除了所有调控器的列表,但为了获得更多细节,我需要单独进入每个调控器的页面并保存数据。我在网上找到了代码建议,利用“下一步”按钮或网址结构循环遍历多个网站。但是,该网站没有下一个按钮,并且url-links不遵循loopable结构。所以我被困住了。
我很感激我能得到的任何帮助。我想在每个州长页面中提取主要文本(“地址”标签中的“办公室日期”,“学校”等)上方的信息,例如在this one中。
这是我到目前为止所得到的:
import bs4 as bs
import urllib.request
import pandas as pd
url = 'https://www.nga.org/cms/FormerGovBios?begincac77e09-db17-41cb-9de0-687b843338d0=10&endcac77e09-db17-41cb-9de0-687b843338d0=9999&pagesizecac77e09-db17-41cb-9de0-687b843338d0=10&militaryService=&higherOfficesServed=&religion=&lastName=&sex=Any&honors=&submit=Search&college=&firstName=&party=&inOffice=Any&biography=&warsServed=&'
sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce, "html.parser")
#dl list of all govs
dfs = pd.read_html(url, header=0)
for df in dfs:
df.to_csv('governors.csv')
#dl links to each gov
table = soup.find('table', 'table table-striped table-striped')
links = table.findAll('a')
with open ('governors_links.csv', 'w') as r:
for link in links:
r.write(link['href'])
r.write('\n')
r.close()
#enter each gov page and extract data in the "address" tag(s)
#save this in a csv file
答案 0 :(得分:1)
我假设您已获得名为links
的列表中的所有链接。
您可以这样做以逐个获取所有州长所需的数据:
for link in links:
r = urllib.request.urlopen(link).read()
soup = bs.BeautifulSoup(r, 'html.parser')
print(soup.find('h2').text) # Name of Governor
for p in soup.find('div', {'class': 'col-md-3'}).findAll('p'):
print(p.text.strip()) # Office dates, address, phone, ...
for p in soup.find('div', {'class': 'col-md-7'}).findAll('p'):
print(p.text.strip()) # Family, school, birth state, ...
修改:
将您的links
列表更改为
links = ['https://www.nga.org' + x.get('href') for x in table.findAll('a')]
答案 1 :(得分:1)
这可能有用。自从我上班以来,我还没有完全测试它,但它应该是你的起点。
choco install ruby --version 2.4.3.1