scrapy提取html示例
选择器有四种基本类型:
-
Selector有四个基本的方法:
-
xpath():参数是xpath表达式,也就是类似于上面例子中的表达式,
-
css():输入css表达式;
-
extract():序列化该节点为unicode字符串并返回list;
-
re():输入正则表达式,返回unicode字符串list列表;
import scrapy
class LinkCheckerSpider(scrapy.Spider):
name = 'link_checker'
allowed_domains = ['www.example.com']
start_urls = ['http://www.example.com/']
def parse(self, response):
""" Main function that parses downloaded pages """
# 打印spider正在进行的事务
print(response.url)
# 获取所有<a>标签
a_selectors = response.xpath("//a")
# 对每个标签进行循环操作
for selector in a_selectors:
# 解析出链接的文本
text = selector.xpath("text()").extract_first()
# 解析出链接的网址
link = selector.xpath("@href").extract_first()
# 创建一个新的Request对象
request = response.follow(link, callback=self.parse)
# 基于生成器返回该对象
yield request
xpath 在对已经提取出来的结果进行二次解析时,容易犯错;
原因:因为通过xpath第一次解析出来的结果是一个elements(他自带的类型)
第二次解析的时候还是使用的是"/" ,那就是错误的,因为它的意思代表的是根目录解析(只对第一次转成html有效果)
xpath的elements对象进行解析时,不用加 / 解析,直接解析就行