爬取江苏省水利厅水情信息栏数据:解析代码问题和解决方案

本文将针对以下代码出现的打印结果为空的问题,进行分析并提供解决方案。

url = 'http://jswater.jiangsu.gov.cn/col/col54071/index.html'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0'}
r = requests.get(url=url, headers=headers)
r.encoding = r.apparent_encoding
# r.encoding="utf-8"
r = r.text

# if not os.path.exists("./4kpiclibs"):
#     os.mkdir("./4kpiclibs")
# print(r)
# #解析源码数据
tree = etree.HTML(r)
li_list = tree.xpath('//html/div[@class="default_pgContainer"]')
# fp = open("4kanimals", "wb")
print(li_list)

问题分析

根据提供的代码和网址,可以看出可能有以下原因导致打印结果为空:

  1. 网站内容访问限制: 该网站可能需要登录或其他验证才能访问,因此无法直接通过 requests.get() 方法获取到需要的信息。
  2. XPath 表达式错误: xpath 表达式可能不正确,导致无法匹配到需要的数据。
  3. 动态加载内容: 网页的内容可能是通过 JavaScript 动态加载的,requests.get() 方法无法获取到动态加载的内容。

解决方案

为了解决这些问题,可以尝试以下方法:

  1. 检查网站访问权限: 检查网址是否需要登录或其他验证。如果需要,可以尝试使用相关的库或方法进行登录或模拟登录。例如,可以使用 requests 库的 requests.post() 方法发送登录请求,或者使用 Selenium 库模拟浏览器行为进行登录。
  2. 验证 XPath 表达式: 使用浏览器的开发者工具或其他工具来辅助确定正确的 xpath 表达式。可以使用 Chrome 浏览器自带的开发者工具,选择“元素”选项卡,找到需要提取的数据所在元素,然后右键点击“复制” -> “复制 XPath”。
  3. 处理动态加载内容: 如果网页内容是通过 JavaScript 动态加载的,可以使用 Selenium 等工具来模拟浏览器行为,获取动态加载的内容。 Selenium 可以启动一个真实的浏览器,并执行 JavaScript 代码,从而获取到所有动态加载的内容。

代码优化

  1. 恢复注释掉的代码: 注释掉的代码部分中创建文件夹和打开文件的代码可以恢复,以便保存爬取到的数据。
  2. 错误处理: 可以使用 try...except 语句来捕获异常,并进行相应的处理,提高代码的健壮性。
  3. 代码风格: 使用规范的代码风格,并添加必要的注释,提高代码的可读性和可维护性。

总结

通过分析代码问题并尝试解决方案,可以有效解决网页内容无法获取的问题,并成功爬取到所需数据。同时,需要注意代码的优化和健壮性,以确保爬虫程序的稳定运行。

爬取江苏省水利厅水情信息栏数据:解析代码问题和解决方案

原文地址: https://www.cveoy.top/t/topic/pZtr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录