0
, пожалуйста, помогите исправить сценарий.Как получить второй подэлемент?
import urllib.request
import urllib.parse
import re
import requests
import bs4
beginIndex = 1000
endIndex = 1010
prefix = "http://www.inpic.ru"
for i in range(beginIndex, endIndex):
req = requests.get(prefix + '/image/' + str(i))
if req.status_code == requests.codes.ok:
print(i, '\t', req.status_code, '\t', req, end='\n')
soup = bs4.BeautifulSoup(req.content)
#print(soup.prettify())
name = soup.find("td", {"class": "post_title"}).contents[1].contents
author = soup.find("td", {"class": "post_title"}).contents[2].contents[1].contents
#name = replace(name, '/', '_')
print(name, '\t', author)
сообщение об ошибке:
Traceback (most recent call last): File
"C:\VINT\OPENSERVER\OpenServer\domains\localhost\python\parse_html\1\q.py",
line 19, in <module>
author = soup.find("td", {"class": "post_title"}).contents[2].contents[1].contents File
"C:\Python33\lib\site-packages\bs4\element.py", line 675, in
__getattr__
self.__class__.__name__, attr)) AttributeError: 'NavigableString' object has no attribute 'contents'
проблема заключается в том, что невозможно перечислить содержимое элемента с классом «date_author». Мне нужно использовать только команду "содержимое" (НЕ NextSibling и т.д.)
Почему вы не можете использовать 'next_sibling' или подобное? – Birei
Я просто подключил '' http: // www.inpic.ru/image/1010'' и пропустил его через bs4 и 'soup.find (" td ", {" class ":" post_title "}). [2] '- это просто строковый литерал' '\ n''. Вам нужно переосмыслить свою стратегию разбора. Я не знаю, почему вы * только * должны использовать содержимое, но это хрупкая стратегия. Подумайте об использовании операций 'select' или clained' find', как минимум. – roippi