Python网页爬虫遇AttributeError:'list'对象无'xpath'属性,求助解决
问题解决
你的报错原因很明确:doc.xpath()返回的是匹配到的元素列表,parcel_info是个列表,而列表没有xpath方法,所以调用parcel_info.xpath()就会报错。
给你两个修复方案:
方案1:一步到位写XPath
直接在初始XPath里定位到地块编号的元素,不需要拆分两步,代码改成:
import requests from lxml import html html = requests.get("https://jeffersonmo-assessor.devnetwedge.com/parcel/view/01401903003039/2023") doc = html.fromstring(html.content) # 直接定位到目标div的文本 parcelNumber = doc.xpath('//div[@class="panel-body collapse in egfjbbgcdd"]//td[@class="col-xs-6"]/div[@class="inner-value"]/text()') print(parcelNumber)
注意:XPath里用text()而不是text_content(),text_content()是lxml元素对象的方法,不是XPath表达式的语法。
方案2:从列表中取元素再调用xpath
如果一定要分两步写,需要先从parcel_info列表中取出具体的元素(比如第一个匹配到的元素),再调用xpath,同时要注意判断列表是否为空,避免索引越界:
import requests from lxml import html html = requests.get("https://jeffersonmo-assessor.devnetwedge.com/parcel/view/01401903003039/2023") doc = html.fromstring(html.content) parcel_info = doc.xpath('//div[@class="panel-body collapse in egfjbbgcdd"]') if parcel_info: # 先判断是否找到元素 parcelNumber = parcel_info[0].xpath('.//td[@class="col-xs-6"]/div[@class="inner-value"]/text()') print(parcelNumber) else: print("未找到匹配的panel-body元素")
另外,你提到的“只爬取单个元素而非列表”的猜测是对的——如果你确定页面上只有一个地块编号,最后可以取parcelNumber[0]来拿到单个字符串值,比如print(parcelNumber[0])。
内容的提问来源于stack exchange,提问作者Jamie Vergano
相关产品推荐
相关产品推荐

