temp=response.xpath('/html/body/div[2]/div/div/div[1]/div/div[3]/div[1]/div[2]/div/div/div/img')无法订位到元素,原文件却有此元素
时间: 2023-08-30 21:08:59 浏览: 153
您的问题是关于使用XPath无法定位到元素的情况,但是在原文件中却存在该元素,对吗?这可能是由于几种原因导致的。以下是一些可能的解决方案:
1. 确保使用的XPath表达式是正确的。您可以通过检查原始文件的HTML结构,确保XPath表达式与要定位的元素匹配。
2. 检查是否存在动态加载或异步加载的内容。有些网页可能使用JavaScript或AJAX进行内容加载,这可能导致XPath无法定位到元素。您可以尝试等待页面加载完成后再执行XPath定位操作。
3. 检查元素是否在嵌套的iframe或frame中。如果元素位于嵌套的框架中,您需要先切换到相应的框架,然后再执行XPath定位操作。
4. 使用其他定位方法。除了XPath,还有其他一些定位方法,如CSS选择器、ID、Class等。您可以尝试使用其他方法来定位元素。
如果您能提供更多关于您遇到问题的详细信息,我可以给出更具体的建议。希望这些解决方案对您有帮助!
相关问题
from urllib.parse import urljoin from lxml import etree import requests url = "https://sph.pku.edu.cn/szdw/lxbywstjxx.htm" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.12022 SLBChan/25" } response = requests.get(url, headers=headers) response.encoding = response.apparent_encoding content = response.text html = etree.HTML(content) list = html.xpath("/html/body/div[3]/div/div/div[3]/div[2]/ul/li/div[1]/a") for a in list: link = a.xpath(".//@href")[0] detail_url = urljoin(url, link) # print(link) new_response = requests.get(detail_url, headers=headers) new_response.encoding = new_response.apparent_encoding new_content = new_response.text new_html = etree.HTML(new_content) div = new_html.xpath("/html/body/div/div[4]/div/div/div[3]/div[2]/form[1]/div[1]/div[2]") for div in div: name = div.xpath(".//h2/span/text()") email = div.xpath(".//ul/li[2]/span/text()") name = str(name)[2:-2] email = str(email)[2:-2] print(name) print(email)
这段代码使用Python,导入urllib.parse和lxml.etree模块以及requests模块来爬取指定网站的信息。使用requests模块发起一个GET请求获取网页内容,并使用etree模块来解析HTML文档。其中,使用xpath方法从HTML文档中获取所需信息,再使用urljoin方法将相对链接转换为绝对链接。
import scrapy from ychouse.items import YchouseItem # 导入item class EsfSpider(scrapy.Spider): name = "esf" allowed_domains = ["allowdomians"] start_urls = ["https://fc.cqyc.net/resoldhome/esf/list"] def parse(self, response): lilist = response.xpath('/html/body/div[6]/div[3]/ul/li') # print(lilist) for li in lilist: item = YchouseItem() #实例化item item["title"] = li.xpath('./div[2]/p[1]/a/text()').extract_first() item['href'] ='https://fc.cqyc.net' + li.xpath('./div[2]/p[1]/a/@href').extract_first() item['housetype'] = li.xpath('./div[2]/p[2]/span[1]/text()').extract_first() item['floor'] = li.xpath('./div[2]/p[2]/span[2]/text()').extract_first() # print(item) yield scrapy.Request(item['href'],callback=self.parseinfo,meta={'item':item}) #翻页 # next_url = 'https://fc.cqyc.net' + response.xpath('//span[@class="next-page"]/../@href').extract_first() # if next_url != response.url: # yield scrapy.Request(url=next_url,callback=self.parse) pass def parseinfo(self,response): item = response.meta['item'] item['houseimg']= response.xpath('/html/body/div[4]/div/div[3]/div[2]/ul/li[1]/img/@src').extract_first() print(item)
这段代码是使用Scrapy框架爬取重庆房产网的二手房列表信息,并且获取每个房源的详情页链接,然后进入详情页爬取更详细的房源信息。其中,使用了XPath语法来解析HTML页面,将解析得到的信息存储到自定义的Item对象中,最后使用yield返回给Scrapy框架。同时,在进入详情页时,使用了Scrapy的meta参数将Item对象传递给了回调函数parseinfo,以便在该函数中继续对Item对象添加信息。
阅读全文