xpath中小爬爬的运用
本文最后更新于:4 年前
这儿是爬虫部分xpath的初始学习,在我学习完html和css之后,就采用结点的方式去获取网站了,因此这儿不多赘述,后续有精力再去完善相应的内容。
爬虫再一次学习
先学了urllib3和requests这两个库,具体的笔记和使用参考<C:\coding\anaconda\爬虫\第一个小爬爬>中的两个例子,这里仅仅是用爬虫抓取了网页,还未进行分析处理。
HTML页面解析:
lxml这个库中提供xpath语句可以灵活提取页面内容
方法:
from lxml impoet etree
etree.HTML()
(生成etree对象)xpath()
xpth语法:
- 节点名
- / 从根节点选取
- //选取所有符合条件的节点
- .选取当前节点
- ..选取当前父节点
- *这个东西很重要啊,代表一切的可能的标签
- @选取属性
- 路径表达式举例:
- /bookstore 第一个bookstore
- /bookstore/book 属于bookstore的子元素的所有book元素
- //book 选取所有book子元素
- //bookstore//book 处于bookstore元素后代所有的book元素
- //@lang 选取名字为lang的所有属性
- /bookstore/book/text() 属于bookstore的子元素的所有book元素的文本
- 谓语:
- /bookstore/book[1] xpath中索引都是从0开始,与python中一样的
- //title[@lang] 选取所有名为lang的属性的title元素
- //title[@lang=’eng’]
- 常见用法(直接复制xpath经常失效哦):
- 首先先找到一个大的块儿有id或者是class的那种
- 然后//div[@class=’’][第几块儿].xpath(接着往下找)
数据保存为CSV文件格式:
保存信息: 线路名称,站点信息
实现步骤:
- data_save_util.py模块编写:
1
2
3
4
5
6
7
8
9
10
11
12import csv
import os
def save_to_csv(line,stations):
is_exist = False
if os.path.exists('stations.csv'):
is_exist = True
with open('station.csv',mode='a',encoding='utf-8',newline='') as csvfile:
writer = csv.writer(csvfile)
if not is_exist:
writer.writerow(['公交线路','站点'])
writer.writerow([line,','.join(stations)])- 添加sava_to_csv(line,stations)方法
- 将处理好爬取出来的列表作为参数传递给writer.writerow文件,注意传递的东西是String哦,所以才有那个join的处理。
编写页面爬取控制逻辑:
- 爬取第一层网页(列表页):
- 生成第二层爬取目标页面链接列表
- 便利爬取第二层网页信息:
- 爬取第二层网页
- 提取目标信息
- 保存目标信息
- 爬取第一层网页(列表页):
大的启发:
- scrapy没有你想的那么好用,这两个库的灵活度更高一点。
- xpath自己手写非常重要,要去找关键的特征点然后分析页面。
xpath中小爬爬的运用
https://alexanderliu-creator.github.io/2021/02/20/pa-chong-shen-ru-li-jie-zi-xue/