关于xpath解析定位问题?
# (1) 请求对象的定制
# (2)获取网页的源码
# (3)下载
# 需求 下载的前十页的图片
# https://sc.chinaz.com/tupian/qinglvtupian.html
# https://sc.chinaz.com/tupian/qinglvtupian_page.html
import urllib.request
from lxml import etree
def create_request(page):
if(page == 1):
url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
else:
url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'
print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
}
request = urllib.request.Request(url = url, headers = headers)
return request
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
def down_load(content):
# 下载图片
# urllib.request.urlretrieve('图片地址','文件的名字')
tree = etree.HTML(content)
name_list = tree.xpath('//div[@class="item masonry-brick"]/img/@alt') #在网页检查中的div中找不到 id,新手不知道怎么写路径,,
#但是这个路径用网页xpath插件可以查看到内容,,
print(len(name_list)) #这里打印结果为 0
for name in name_list:
print(name) #这里打印结果也为 0,,不知道哪里出了问题,在网页检查中的div中找不到 id,
# 一般设计图片的网站都会进行懒加载
# src_list = tree.xpath('//div[@class="item masonry-brick"]/img/@src')
# print(src_list,len(src_list))
# for i in range(len(name_list)):
# name = name_list
# src = src_list
# url = 'https:' + src
#
# urllib.request.urlretrieve(url=url,filename='./loveImg/' + name + '.jpg')
if __name__ == '__main__':
start_page = int(input('请输入起始页码'))
end_page = int(input('请输入结束页码'))
for page in range(start_page,end_page+1):
# (1) 请求对象的定制
request = create_request(page)
# # (2)获取网页的源码
content = get_content(request)
# (3)下载
down_load(content)
问题描述:
在给定的代码中,使用XPath解析网页内容,定位图片的名称。但是在执行代码后,发现无法获取到正确的图片名称,打印结果为0。
解决方案:
根据代码中的XPath表达式,定位图片名称的路径为'//div[@class="item masonry-brick"]/img/@alt'。但是根据问题描述,该路径在网页检查中找不到id,但可以在网页XPath插件中查看到内容。
问题的原因可能是网页内容动态加载或者XPath表达式不正确。为了解决这个问题,可以尝试以下几个步骤:
1. 确保网页内容已经完全加载:有些网页使用懒加载技术,即在初始加载时只显示部分内容,当用户滚动到底部时再加载剩余内容。在这种情况下,需要模拟用户滚动到底部的操作,以确保所有图片都已加载。
2. 调整XPath表达式:如果图片名称的路径不正确,可以尝试不同的XPath表达式来定位图片名称。可以使用浏览器的开发者工具来检查网页结构,找到正确的XPath路径。
3. 检查网页内容:在获取网页源码后,可以打印出网页内容,检查是否存在图片名称的相关信息。如果没有找到相关信息,可能是因为网页结构发生了变化或者内容被动态加载。
希望以上解决方案能够帮助到您解决问题。如果还有其他疑问,请随时提问。 根据你提供的代码,我看到你想要下载网页中的图片。在你提到的问题中,你遇到了XPath定位问题,无法正确获取图片的名称。下面我将解释可能出现问题的地方,并提供一种解决方法。
问题可能出现在以下两行代码:
name_list = tree.xpath('//div[@class="item masonry-brick"]/img/@alt')
print(len(name_list))
首先,请确保你使用的XPath表达式能够准确定位到图片的名称。你可以使用浏览器中的XPath插件来验证XPath表达式是否正确。检查网页源码,确定图片名称所在的HTML标签和属性。如果图片名称存在于img标签的alt属性中,那么你的XPath表达式是正确的。
如果你的XPath表达式是正确的,但仍然无法获取到正确的结果,请考虑以下几个可能的原因:
1. 网页内容未完全加载:有些网站会使用懒加载技术延迟加载图片和其他内容。这可能导致XPath无法正确找到预期的元素。你可以尝试等待一段时间,确保网页内容完全加载后再进行解析。
2. 网页结构变化:如果网页的结构发生变化,例如修改了CSS类名或HTML标签,你之前编写的XPath表达式可能就无法正确匹配到目标元素。请确保你的XPath表达式与网页的实际结构匹配。
3. 防爬虫机制:有些网站会采取防爬虫措施,例如使用动态生成的元素或验证码来阻止自动化程序获取内容。这可能导致XPath无法正确解析网页。你可以尝试模拟浏览器行为,例如使用Selenium库来加载网页并执行JavaScript代码,以绕过这些防护机制。
针对你的代码,我注意到你还注释了一部分关于图片地址的代码。如果你解决了图片名称获取的问题,你可以取消注释相关代码,使用正确的XPath表达式来获取图片地址,并使用urllib.request.urlretrieve()函数下载图片。
希望这些解释对你有所帮助!如果你有更多问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]