как исправить AttributeError: у объекта 'HTMLParserTreeBuilder' нет атрибута 'initialize_soup' - PullRequest
1 голос
/ 06 июня 2019

Я получаю следующую ошибку:

AttributeError: 'HTMLParserTreeBuilder' object has no attribute 'initialize_soup'

Я пытался найти xpath для флажка M в eBay ( ссылка )

Я использую spyder и импортировал bs4 везде, где могу.

import requests
from bs4 import BeautifulSoup

web_page = requests.get('https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=mens+shirt&_sacat=0')
web_soup = BeautifulSoup(web_page.text, 'html.parser')
checkbox = soup.find(class_='cbx x-refine__multi-select-checkbox')
checkbox_names = checkbox.find_all('a')

for check in checkbox_names:
    print(check.prettify())

Я ожидал такой вывод

<a href="/web/20121007172955/https://www.nga.gov/cgi-bin/tsearch?artistid=11630">
 Zabaglia, Niccola
</a>

Я следовал этому руководству , чтобы помочь мне с моим кодом.

1 Ответ

0 голосов
/ 06 июня 2019

Во-первых, ваш soup.find(class_='cbx x-refine__multi-select-checkbox') фактически выбирает только первый элемент с классом cbx x-refine__multi-select-checkbox

Таким образом, чтобы получить URL для "Рубашки размера M", вы можете сделать следующее:

КОД:

import requests
from bs4 import BeautifulSoup as soup

web_page = requests.get('https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=mens+shirt&_sacat=0')
web_soup = soup(web_page.text, 'html.parser')
links = web_soup.find_all('a', {'class':'cbx x-refine__multi-select-link'})
for l in links:
    checkbox = l.find('input',{'class':'cbx x-refine__multi-select-checkbox '})
    if checkbox and 'M' == checkbox.get('aria-label'):
        #FOUND
        print(l.get('href'))

ВЫВОД:

https://www.ebay.com/sch/i.html?_from=R40&_nkw=mens+shirt&_sacat=0&rt=nc&Size%2520%2528Men%2527s%2529=M&_dcat=185100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...