Python 对表的内容进行垃圾处理

Python 对表的内容进行垃圾处理,python,dictionary,web-scraping,html-table,Python,Dictionary,Web Scraping,Html Table,嗨,我正在尝试使用Python和美丽的汤刮网页。网页中有各种表格,其中包含我想要的结果,但我很难: 1) 找到合适的桌子 2) 找到正确的两个单元格 3) 将单元格1和单元格2分别写入字典键和值中 到目前为止,在发出请求并解析HTML后,我使用: URL='someurl.com' def datascrape(url): page=requests.get(url) print ("requesting page") soup = BeautifulSoup(page

嗨,我正在尝试使用Python和美丽的汤刮网页。网页中有各种表格,其中包含我想要的结果,但我很难: 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)

不幸的是,“结果”总是空的。我真的不知道我会错在哪里。有人能给我一些启发吗?

我不知道为什么你要用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)

希望这有帮助

我不知道为什么要使用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)

希望这有帮助

如果仅在状态之后且不适用,则可以使用位置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)

如果只是在状态之后,并且不适用,则可以使用位置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)

可能有多种原因,包括(但不限于)动态生成的表。如果你能提供url和预期结果,有人会回答。你看过请求了吗?您是否确实查看了所请求的真实HTML(不是通过浏览器)?我猜你想要刮的东西实际上不在你请求的页面上。请对加载该网站时发出的所有请求进行一些调查。这是无法帮助的,因为我们无法在没有目标站点的情况下复制您的问题这是我试图获取的URL的一个示例:是的,我查看了返回的HTML,它似乎相当直接,虽然我对HTML真的不太了解。如果您准确地指出希望返回的值,这会有所帮助。可能有多种原因,包括(但不限于)动态生成的表。如果你能提供url和预期结果,有人会回答。你看过请求了吗?您是否确实查看了所请求的真实HTML(不是通过浏览器)?我猜你想要刮的东西实际上不在你请求的页面上。请对加载该网站时发出的所有请求进行一些调查。这是无法帮助的,因为我们无法在没有目标站点的情况下复制您的问题这是我试图获取的URL的一个示例:是的,我查看了返回的HTML,它似乎相当直接,虽然我对HTML真的不太了解。如果您准确地指出您希望看到返回的值,这会有所帮助。谢谢,我以前没有遇到过这个问题。我想这会有帮助的。谢谢,我以前没有遇到过这个。我想这会有帮助的。