Web抓取表的内容

时间:2019-02-16 15:39:27

标签: python dictionary web-scraping html-table

嗨,我正在尝试使用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)

不幸的是,“结果”始终为空。我真的不确定我要去哪里。有人可以启发我吗?

2 个答案:

答案 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)