Webscraping содержимое таблицы - PullRequest
0 голосов
/ 16 февраля 2019

Привет. Я пытаюсь использовать 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 голосов
/ 18 февраля 2019

Если сразу после состояния и не применимо, вы можете использовать позиционные селекторы CSS типа nth-of-type.Это зависит от одинаковой позиции на страницах.

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)
0 голосов
/ 17 февраля 2019

Я не уверен, почему вы используете 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)

Надеюсь, это поможет!

...