parsel解析
请问大佬们,这个页面怎样用parsel把城市和最低温度爬取出来呢 http://www.weather.com.cn/textFC/hb.shtmlimport requests
from parsel import Selector
url = 'http://www.weather.com.cn/textFC/hb.shtml'
response = requests.get(url)
html = response.text
selector = Selector(text=html)
city_elements = selector.css('.conMidtab .conMidtab2 .conMidtab3 a')
temperature_elements = selector.css('.conMidtab .conMidtab2 .conMidtab3 span')
cities = city_elements.css('::text').getall()
temperatures = temperature_elements.css('::text').getall()
for city, temperature in zip(cities, temperatures):
print(f"城市:{city},最低温度:{temperature}")
沐雨尘枫 发表于 2023-7-8 16:26
这个不行,爬不到{:10_266:} 哈岁NB 发表于 2023-7-8 16:29
这个不行,爬不到
嗯,加代码就可以了,如果有帮助能给个最佳答案吗
with open('weather_data.txt', 'w') as file:
for city, temperature in zip(cities, temperatures):
file.write(f"城市:{city},最低温度:{temperature}\n")
哈岁NB 发表于 2023-7-8 16:29
这个不行,爬不到
代码没有问题,只是没有保存 沐雨尘枫 发表于 2023-7-8 16:57
代码没有问题,只是没有保存
大佬,按照你的这个代码我这个咋啥也爬不到{:10_266:}
import requests
from parsel import Selector
url = 'http://www.weather.com.cn/textFC/hb.shtml'
response = requests.get(url)
html = response.text
selector = Selector(text=html)
city_elements = selector.css('.conMidtab .conMidtab2 .conMidtab3 a')
temperature_elements = selector.css('.conMidtab .conMidtab2 .conMidtab3 span')
cities = city_elements.css('::text').getall()
temperatures = temperature_elements.css('::text').getall()
with open('weather_data.txt', 'w') as file:
for city, temperature in zip(cities, temperatures):
file.write(f"城市:{city},最低温度:{temperature}\n")
沐雨尘枫 发表于 2023-7-8 16:57
代码没有问题,只是没有保存
你的代码确实爬不到 import requests
from parsel import Selector
url = 'http://www.weather.com.cn/textFC/hb.shtml'
response = requests.get(url)
response.encoding='utf-8'
html_content = response.text
# 假设html_content是你从网页获取的HTML内容
selector = Selector(html_content)
# 遍历页面中的每个省/直辖市信息
for province_info in selector.css('body > div.lqcontentBoxH > div.contentboxTab > div > div > div.hanml > div:nth-child(1) > div'):
# 获取第一个城市名
city = province_info.css('table > tr:nth-child(3) > td:nth-child(2) > a::text').get()
# 获取第一个城市的最低温度
min_temperature = province_info.css('table > tr:nth-child(3) > td:nth-child(8)::text').get()
print(f'城市: {city}, 最低气温: {min_temperature}')
# 遍历每个省的每个城市
for city_info in province_info.css('table > tr'):
# 获取城市名
city = city_info.css('td:nth-child(1) > a::text').get()
# 获取最低温度
min_temperature = city_info.css('td:nth-child(7)::text').get()
print(f'城市: {city}, 最低气温: {min_temperature}')
首先,请确保您已经安装了 parsel 和 requests 库。如果没有安装,可以使用以下命令安装:
pip install parsel requests
然后,您可以使用以下代码来爬取城市和最低温度:
import requests
from parsel import Selector
url = "http://www.weather.com.cn/textFC/hb.shtml"
# 发送请求并获取页面内容
response = requests.get(url)
response.encoding = "utf-8"
html_content = response.text
# 使用Parsel解析页面
selector = Selector(text=html_content)
# 定位城市和最低温度的XPath
cities_xpath = "//div//td/a/text()"
min_temps_xpath = "//div//td/text()"
# 提取城市和最低温度
cities = selector.xpath(cities_xpath).getall()
min_temps = selector.xpath(min_temps_xpath).getall()
# 将结果打印出来
for city, min_temp in zip(cities, min_temps):
print(f"{city}: {min_temp}")
这段代码首先发送一个请求到目标网址并获取HTML内容。接着,使用Parsel的 Selector 解析页面,然后根据XPath提取城市和最低温度的数据。最后,将结果打印出来。
请注意,这个代码只适用于该网址的当前结构。如果页面结构发生改变,您可能需要更新XPath以获取正确的数据。 陶远航 发表于 2023-7-8 17:52
首先,请确保您已经安装了 parsel 和 requests 库。如果没有安装,可以使用以下命令安装:
这个爬出来是这样的
哈岁NB 发表于 2023-7-8 18:10
这个爬出来是这样的
为什么你就是不看我的?{:10_266:} 请关注下我的答案吧,球球了:https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=230602&pid=6280035 isdkz 发表于 2023-7-8 18:21
请关注下我的答案吧,球球了:https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=230602&pi ...
没看到{:10_266:},感谢感谢 isdkz 发表于 2023-7-8 18:16
为什么你就是不看我的?
一开始看到了,后来刷新一下没了,就没看到了{:10_266:} 哈岁NB 发表于 2023-7-8 18:26
一开始看到了,后来刷新一下没了,就没看到了
好吧{:10_250:} isdkz 发表于 2023-7-8 18:26
好吧
请问我要是想爬周一周二周三的数据,该怎么爬呢,那个页面必须点一下才会在源网页代码中显示数据 哈岁NB 发表于 2023-7-8 18:47
请问我要是想爬周一周二周三的数据,该怎么爬呢,那个页面必须点一下才会在源网页代码中显示数据
import requests
from parsel import Selector
url = 'http://www.weather.com.cn/textFC/hb.shtml'
response = requests.get(url)
response.encoding='utf-8'
html_content = response.text
# 假设html_content是你从网页获取的HTML内容
selector = Selector(html_content)
date = selector.css('body > div.lqcontentBoxH > div.contentboxTab > div > div > ul.day_tabs > li::text')
# 遍历页面上每天的信息
for i, day_info in enumerate(selector.css('body > div.lqcontentBoxH > div.contentboxTab > div > div > div.hanml > div')):
print(f'{date.get()}:\n')
# 遍历页面中的每个省/直辖市信息
for province_info in day_info.xpath('./div'):
# 获取第一个城市名
city = province_info.css('table > tr:nth-child(3) > td:nth-child(2) > a::text').get()
# 获取第一个城市的最低温度
min_temperature = province_info.css('table > tr:nth-child(3) > td:nth-child(8)::text').get()
print(f'城市: {city}, 最低气温: {min_temperature}')
# 遍历每个省的每个城市
for city_info in province_info.css('table > tr'):
# 获取城市名
city = city_info.css('td:nth-child(1) > a::text').get()
# 获取最低温度
min_temperature = city_info.css('td:nth-child(7)::text').get()
print(f'城市: {city}, 最低气温: {min_temperature}')
print('\n', '-' * 50, '\n', sep='')
isdkz 发表于 2023-7-8 19:14
好的,感谢感谢 isdkz 发表于 2023-7-8 19:14
请问这个代码为什么可以爬取到每一天的呢,我没太没看懂{:10_266:},网页中需要点击才会显示,代码也没有发现点击的动作为什么就可以爬取到呢 本帖最后由 isdkz 于 2023-7-9 10:55 编辑
哈岁NB 发表于 2023-7-9 10:20
请问这个代码为什么可以爬取到每一天的呢,我没太没看懂,网页中需要点击才会显示,代码也没有 ...
因为他每一天的数据本来就在网页的标签里面的,只不过加了隐藏属性而已,这个不影响我们获取标签,只要选择器写对了就能获取到,隐藏属性只是作用到浏览器解析html标签的
你点击的时候实际上就是执行了js代码把之前显示的设为隐藏,把你点击的那个的隐藏属性去掉
页:
[1]
2