鱼C论坛

 找回密码
 立即注册
查看: 996|回复: 2

[已解决]爬虫求助

[复制链接]
发表于 2021-7-12 09:38:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from  lxml import etree
import requests
if __name__ == '__main__':
    url='https://www.aqistudy.cn/historydata/'
    headers={
        'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36'
    }
    all_hotcity=[]
    all_allcity=[]
    page_data=requests.get(url=url,headers=headers).text
    tree=etree.HTML(page_data)
    hot_li_list=tree.xpath('//div[@class="bottom"]/ul/li')
    for hot_li in hot_li_list:
        hot_city=hot_li.xpath('./a/text()')[0]
        all_hotcity.append(hot_city)
    all_ul_list=tree.xpath('//div[@class="bottom"]/ul')
    for all_ul in all_ul_list:
        all_li_list=all_ul.xpath('./div[2]/li')
        for li in all_li_list:
            all_city=li.xpath('./a/text()')[0]
            all_allcity.append(all_city)
    print(all_hotcity)
    print(all_allcity)

为什么所有城市和热门城市都可以用div的class属性定位,所有城市的div class在后面,使用该定位的时候不会定位到前一个div class吗
最佳答案
2021-7-12 09:47:21

因为这里热门城市在 类 bottom 所属标签下的 ul 标签

xpath 会获取所有符合条件的标签构成一个序列对象

不管前后只好符合条件都会在这个序列对象中

最后通过 for 循环就能依次读取该序列中符合条件的标签,以便后续进行数据提取

pycharm64_4BmZ2hUjJN_精灵看图.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-12 09:47:21 | 显示全部楼层    本楼为最佳答案   

因为这里热门城市在 类 bottom 所属标签下的 ul 标签

xpath 会获取所有符合条件的标签构成一个序列对象

不管前后只好符合条件都会在这个序列对象中

最后通过 for 循环就能依次读取该序列中符合条件的标签,以便后续进行数据提取

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-12 09:58:44 | 显示全部楼层
如果你不想全部都定位到,那就不要tree.xpath('//div[@class="bottom"]/ul') 这样写
写绝对路径,或者加多一层,tree.xpath('//div[@class="hot"]/div[@class="bottom"]/ul')
因为xpath表达式是匹配所有符合的,返回一个列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-7 21:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表