嗨,我正在尝试使用Python和Beautiful Soup抓取网页。网页中有各种表格,这些表格我想要从中获得结果,但是我正在努力做到: 1)找到合适的桌子 2)找到合适的两个单元格 3)将单元格1和2分别写入字典键和值。
到目前为止,在发出请求并解析HTML之后,我使用:
URL='someurl.com'
def datascrape(url):
page=requests.get(url)
print ("requesting page")
soup = BeautifulSoup(page.content, "html.parser")
return(soup)
soup=datascrape(URL)
results = {}
for row in soup.findAll('tr'):
aux = row.findAll('td')
try:
if "Status" in (aux.stripped_strings):
key=(aux[0].strings)
value=(aux[1].string)
results[key] = value
except:
pass
print (results)
不幸的是,“结果”始终为空。我真的不确定我要去哪里。有人可以启发我吗?
答案 0 :(得分:1)
我不确定您为什么要使用findAll()而不是find_all(),因为对于爬网我还很陌生,但是我认为这会为您提供所需的输出。
URL='http://sitem.herts.ac.uk/aeru/bpdb/Reports/2070.html'
def datascrape(url):
page=requests.get(url)
print ("requesting page")
soup = BeautifulSoup(page.content,
"html.parser")
return(soup)
soup=datascrape(URL)
results = {}
table_rows = soup.find_all('tr')
for tr in table_rows:
td = tr.find_all('td')
row = [i.text for i in td]
try:
for i in row:
if "Status" in i:
key=(row[0].strip())
value=(row[1].strip())
results[key] = value
else:
pass
print(results)
希望这会有所帮助!
答案 1 :(得分:1)
如果仅在状态之后且不适用之后,则可以使用位置n型的CSS选择器。这确实取决于页面之间的位置是否相同。
import requests
from bs4 import BeautifulSoup
url ='https://sitem.herts.ac.uk/aeru/bpdb/Reports/2070.htm'
page=requests.get(url)
soup = BeautifulSoup(page.content, "lxml")
tdCells = [item.text.strip() for item in soup.select('table:nth-of-type(2) tr:nth-of-type(1) td')]
results = {tdCells[0] : tdCells[1]}
print(results)