Как настроить целевой элемент таблицы * Википедии c для очистки bs4? - PullRequest
2 голосов
/ 27 января 2020

here is what I'm trying to target with BeautifulSoup

Вот мой код:

from bs4 import BeautifulSoup
soup = BeautifulSoup(website_url,'lxml')
my_table = soup.find('table',{'class':'wikitable sortable'})

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://en.wikipedia.org/wiki/2019%E2%80%9320_Wuhan_coronavirus_outbreak'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")
page_soup.tbody.tr?

Я пытаюсь настроить таргетинг на этот элемент таблицы, но он не уникален. Как я могу захватить этот вложенный элемент с именем "

Я мог бы сделать page_soup.h1, чтобы захватить все вещи тега h1, но здесь есть много повторяющихся тегов, и я мог бы использовать немного помощи. Я сделал UTFSE, но все еще в замешательстве. Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Если я правильно понимаю ваш вопрос, вы можете попробовать что-то вроде этого:

url = 'https://en.wikipedia.org/wiki/2019%E2%80%9320_Wuhan_coronavirus_outbreak'
import requests
from bs4 import BeautifulSoup as bs
resp = requests.get(url)


soup = bs(resp.text,'lxml')

tabs = soup.find('table',{'class':'wikitable sortable'})
tot = tabs.find_all('tr',{'style':'vertical-align:top'})
for t in tot:    
    rows = t.find_all('td',style=None)
    for r in rows:
        if r.text.strip() == "Total":
            print(m.nextSibling.text)

Идея заключается в том, что целевое число 2903 расположено после строки с текстом (без текста) Total. Слово Total находится в теге td, который не имеет атрибута style. Мы находим этот тег, и целевой номер находится в тексте его ближайшего брата.

Вывод:

2,903

1 голос
/ 27 января 2020

Вы можете использовать регулярное выражение, чтобы найти текст total, а затем find_next('b')

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import re
my_url = 'https://en.wikipedia.org/wiki/2019%E2%80%9320_Wuhan_coronavirus_outbreak'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "lxml")
my_table = page_soup.find('table',{'class':'wikitable sortable'})
item=my_table.find('b',text=re.compile('Total')).find_next('b').text
print(item)

Вывод :

2,903
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...