#python #beautifulsoup
#python #beautifulsoup
Вопрос:
У меня есть набор URL-адресов, у меня есть эти URL-адреса в списке с именем list (например http://www.amazon.com/b/ref=s9_al_bw_brwse_a_v?_encoding=UTF8amp;node=9097393011amp;pf_rd_m=ATVPDKIKX0DERamp;pf_rd_s=center-4amp;pf_rd_r=10RXCP9TZPW3BP73EKHAamp;pf_rd_t=101amp;pf_rd_p=1818119462amp;pf_rd_i=2858778011
). Внизу этой страницы URL-адресов указано количество страниц для каждой категории.
Существует элемент span, из которого я пытаюсь вернуть URL.Но он возвращает NoneType error
Код, который я пробовал до сих пор
for links in full_links:
mech=Browser()
mech.set_handle_robots(False)
mech.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
url=links
page=mech.open(url)
html=page.read()
soup=BeautifulSoup(html)
no_pages = soup.find('div',id="pagn")
a=no_pages.find('span',{'class':'pagnLink'})
for aes in a:
print aes.text
for a in elm.findAll('a'):
link='http://www.amazon.com' a['href']
print link
Комментарии:
1.
soup=BeautifulSoup(html)no_pages = soup.find('div',id="pagn")
Чего вы пытаетесь достичь с помощью этой строки? Или вам не хватает новой строки2. @TimCastelijns Получение содержимого внутри div #pagn
3. Когда я запускаю этот код, я не получаю
NoneType error
, я получаюSyntaxError
soup=BeautifulSoup(html)no_pages = soup.find('div',id="pagn")
. Пожалуйста, дважды проверьте, что этот код идентичен версии, которую вы используете. (подсказка: я повторяю вопрос Тима: «Вам не хватает новой строки?» вопрос)4. @FazeelaAbuZohra: Тим имел в виду, что эта строка не является законным Python. Поскольку это вызвало бы другое исключение, я разделил два выражения на две строки для вас.
Ответ №1:
Вам не удалось включить полную обратную трассировку, но, предположительно soup.find('div')
, это возвращенный вызов None
. Для этой страницы элемент, который вы пытались найти, отсутствует.
Если элемент не найден, Element.find()
возвращает None
и последующая строка, которая пытается использовать это None
значение, завершится неудачей. В этом случае no_pages
есть None
, поэтому no_pages.find()
затем сбой.
Для подобных поисков элементов гораздо проще использовать селекторы CSS:
for page_link in soup.select('div#pagn span.pagnLink a[href]'):
link = 'http://www.amazon.com' page_link['href']
print link
Это позволит найти все ссылки в <div id="pagn">
<span class="pagnLink>
дереве элементов ->, при условии, что у них есть href
атрибут.
Этот поиск просто вернет пустой цикл, если либо div
или span
отсутствует.
Комментарии:
1. @FazeelaAbuZohra: для URL-адреса, который вы указали в своем сообщении, есть одно совпадение. Если вы ничего не видите для этого URL-адреса, возможно, у вас ошибка при загрузке страницы или вы
lxml
установили, но у вас проблема сlibxml2
библиотекой (реже в наши дни), и синтаксический анализ по какой-то причине завершается неудачно.