Я новичок в Python и веб-скрапинге и не могу понять, что не так с моим кодом, хоть убей. Это потому, что я очищаю только один элемент, а не список? Я много раз проверял свои XPath. Сейчас просто пытаюсь узнать номер посылки.
Мой код:
html = requests.get("https://jeffersonmo-assessor.devnetwedge.com/parcel/view/01401903003039/2023")
doc = lxml.html.fromstring(html.content)
parcel_info = doc.xpath('//div[@class = "panel-body collapse in egfjbbgcdd"]')
parcelNumber = parcel_info.xpath('./td[@class = "col-xs-6"]/div[@class = "inner-value"]/text_content()')
parcelNumber
Я попробовал приведенный выше код и получил сообщение «AttibuteError: объект списка не имеет атрибута xpath».
Предполагая, что ваш Xpath действительно правильный, вы, вероятно, можете получить доступ к первому элементу списка, заменив parcel_info.xpath...
на parcel_info[0].xpath...
- вместо того, чтобы пытаться получить доступ к .xpath
в списке parcel_info
, получите доступ к нему по первому элементу в списке parcel_info[0]
Когда я открыл страницу, я нигде не нашел класса egfjbbgcdd
. Вот более надежный подход. Метод .xpath()
возвращает список, поэтому перед дальнейшим поиском вам необходимо извлечь из него определенные элементы.
import requests
import lxml.html
import sys
response = requests.get("https://jeffersonmo-assessor.devnetwedge.com/parcel/view/01401903003039/2023")
with open("page.html", "wt") as file:
file.write(response.text)
tree = lxml.html.fromstring(response.text)
try:
overview = tree.xpath('//div[@id = "overview-body"]')[0]
except IndexError:
print("Unable to locate overview.")
sys.exit(1)
try:
number = overview.xpath('.//td[@class = "col-xs-6"]/div[@class = "inner-value"]')[0].text_content()
except IndexError:
print("Unable to locate parcel number.")
sys.exit(1)
print(number)
Выход:
01-4.0-19.0-3-003-039
Огромное спасибо, это сработало! Я вижу строку с надписью "<div class = "panel-body свернуть в egfjbbgcdd" id = "overview-body" style = "padding:0px;">, которая выделяет весь сворачиваемый раздел с надписью "информация о свойстве". Я не уверен, почему это не сработало, но вместо этого я буду использовать ваш пример, я очень ценю это!
doc.xpath()
возвращает список совпадающих элементов (даже если он только один). Так что да,parcel_info
— это список.