Я хочу удалить все сведения о членах из таблицы с помощью BeautifulSoup

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

 import requests
from bs4 import BeautifulSoup

url = 'http://www.gmcgujarat.org/searchdoctor.aspx'
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')

name = soup.find(" ")
for count in range(3333,4444):
        data = {name: " "}
        r = requests.post(url, data=data)
        soup = BeautifulSoup(r.text, 'html.parser')
    
        table = soup.find('table',{"id":"divtest"})
        for tr in table.find_all('tr',class_='odd')[1:5]:
            print tr.text
  

Код не предоставляет данные ‘tr’ и ‘td’, поскольку ‘tr’ задается в четной и нечетной форме, я не знаю, как извлечь данные из этого.

Комментарии:

1. Если вы хотите удалить данные, так почему вы используете ‘request.post’ вместо этого вы должны использовать ‘request.get’

2. я пытался, но это не working..@Mr . Stark

Ответ №1:

Самый простой способ получить все td значения на этом веб-сайте — это

 data = {name: " "}
r = requests.post(url, data=data)
soup = BeautifulSoup(r.text, 'html.parser')

table = soup.find('table',{"id":"divtest"})
tr_arr = []
for tr in table.find_all('tr'):
  tr_arr.append([td.string for td in tr.find_all('td')])
  

Поскольку вам нужно еще больше покопаться в tr , чтобы найти все td файлы.


Но, допустим, вас просто волнует class='odd' , тогда добавление class_='odd' в find_all уже является правильным способом.

Однако, что, если некоторые строки ( tr ) содержат данные, которые вам не нужны. Допустим, вы хотите получить только всю строку с помощью class='odd' или class='even' , но некоторые строки поставляются с class='na' .

На самом деле, вы можете передать dict в идентификатор класса find_all следующим образом:

 table.find_all('tr', {"class": ["odd", "even"]})
  

Или даже больше, добавив вашу конкретную логику с помощью

 table.find_all('tr', class_= lamdba x: x is not None and x in ['odd','even'])
  

Комментарии:

1. я не понимаю, вы можете помочь мне с кодом? @MatrixTai

2. @ghate, это похоже на код, который вы написали, я просто меняю последнюю часть для поиска td . Я добавляю некоторую часть вашего кода для уточнения.

3. @ghate, ты уверен, что сможешь получить целевой HTML-текст с помощью r = requests.post(url, data=data) ?