Как превратить строку в команду? - PullRequest
0 голосов
/ 08 июля 2020

Мне действительно нужно более одного элемента со страницы, но все они находятся под одними и теми же заголовками, и я действительно не хочу повторять одну и ту же строку soup_wash.find("td", headers="tf89c8e5b-5207-48e7-a536-1f50ee7f5088c{}").text.strip() каждый раз, поэтому я пытаюсь установить text в качестве каталог для экономии времени.

import requests
from bs4 import BeautifulSoup

def html(url):

    return BeautifulSoup(requests.get(url).text, "lxml")

soup_wash = html("https://www.washtenaw.org/3108/Cases")

text = 'soup_wash.find("td", headers="tf89c8e5b-5207-48e7-a536-1f50ee7f5088c{}").text.strip()'

item1 = text.format("2")
item2 = text.format("6")

print(item1, item2) # Supposed to print -> 1561, 107 but it actually prints str(text) formatted.

Мне нужен bs4 для обработки строки item1 и item2, но я не знаю, как это сделать.

1 Ответ

1 голос
/ 08 июля 2020

Я лично не стал бы использовать значение tf89c8e5b-5207-48e7-a536-1f50ee7f5088c{} для получения значений Total Cases и Total Deaths, потому что похоже, что оно изменится в любое время.

Вместо этого возьмите первую таблицу и используйте стандартный python индексация для получения столбцов. Например:

import requests
from bs4 import BeautifulSoup


url = 'https://www.washtenaw.org/3108/Cases'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

print('{:<15}{}'.format('Total Cases', 'Total Deaths'))
for tr in soup.select('table')[0].select('tr:has(td)'):
    tds = [td.get_text() for td in tr.select('td')]
    print('{:<15}{}'.format(tds[1], tds[5]))

Печать:

Total Cases    Total Deaths
1561           107
338            3
1899           110
...