马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小白表达能力弱,辞不达意,请大神嘴下留情,我哪里说得不清楚,麻烦耐心指出来。我再想办法说清楚。
下面是某视频教程的代码。
我对12行和20行中的数据解析不太懂。
#12行:host_li_list = tree.xpath('//div[@class="bottom"]/ul/li')
#20行:city_names_list = tree.xpath('//div[@class="bottom"]/ul/div[2]/li')
在网站的网页的源码中,有两个div, class = bottom, 但是它们的父级都不一样。(见截图)
第一个div class=bottom: 是热门城市
第二个div class=bottom: 是全部成市
但是在这个爬虫虫的代码中,没有写不同的父级,直接跳到div[@class="bottom"], 程序能搞清楚,到底是要解析哪个div class=bottom的数据吗?
难道程序是先去试第一个表达式12行,如果成立,就不会往下走了;如果不成立,去试20行?
import requests
from lxml import etree
#项目需求:解析出所有城市名称https://www.aqistudy.cn/historydata/
if __name__ == "__main__":
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
url = 'https://www.aqistudy.cn/historydata/'
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
host_li_list = tree.xpath('//div[@class="bottom"]/ul/li')
all_city_names = []
#解析到了热门城市的城市名称
for li in host_li_list:
hot_city_name = li.xpath('./a/text()')[0]
all_city_names.append(hot_city_name)
#解析的是全部城市的名称
city_names_list = tree.xpath('//div[@class="bottom"]/ul/div[2]/li')
for li in city_names_list:
city_name = li.xpath('./a/text()')[0]
all_city_names.append(city_name)
print(all_city_names,len(all_city_names))
不是这么理解的吧,
我猜,应该是,和windows的文件路径一样,
把整个xpath('//div[@class="bottom"]/ul/li')当成一个路径来看,能找到,就返回了,找不到,就报错了
至于class相同也不影响啊,整体的路径不一样,找到数据就行了
不知道这样理解对不对
|