Scrapy爬虫Xpath编写规则梳理
程序员文章站
2024-01-27 14:26:58
...
进入浏览器的开发者模式(F12),选取需要获取的节点,如果我们想获取一个列表,例如:
在li节点上右键,copy->copy xpath即可获取当前节点的Xpath路径,
直接复制如下:
/html/body/div[4]/div[1]/ul/li[1]
这个不能直接使用,这个是获取了li节点第一个元素,爬虫里我们需要获取一个集合,用来for循环,所以在爬虫开头里需要修改为:
/html/body/div[4]/div[1]/ul/li
代码示例:
#-----关键代码------
def parse(self, response):
for item in response.xpath('/html/body/div[4]/div[1]/ul/li'):
movImgUrl = item.xpath('a/img/@src').extract_first() #海报地址
detailPageUrl = item.xpath("a/@href").extract_first()#详情页地址
可见,如果需要获取 a标签里的图片地址,规则是:
"a/img/@src"
获取a标签里URL规则是:
"a/@href"
获取a括号中的文本,规则是:
"a/text()"
后面的.extract_first()提取第一个元素,获取结果为文本,如果是.extract() ,获取的是一个包含一个元素的List,
为了方便存储,显然.extract_first()更好些。
如果当前的列表包含分页,如图所示:
我们要获取每个tab下面的列表,同时这些列表包含分页,爬虫应该循环遍历每一个分类下的每一页的列表,并爬取,代码示例如下:
def parse(self, response):
for item in response.xpath('/html/body/div[2]/div[2]/ul/li'):
movClass = item.xpath("a/@href").extract_first()#Tab跳转分类地址
movUrl = item.xpath("a/text()").extract_first()#Tab文本
#从第2页开始循环,共爬取114页,这里注意,要找到分页Url的规律,用代码自动拼接分页URL,多点几个下一页,在地址栏就能发现规律了
for i in range(2,115):
mvUrl2 = movUrl + str('index_%s.html' % i)
try:
#执行点击下一页操作,在打开的列表页面循环爬取列表数据
yield scrapy.Request(url=mvUrl2,
callback=lambda response, mvclass=movClass: self.parse_url(response, mvclass))
except:
pass
上一篇: 爬虫-Xpath解析
下一篇: 数据结构与算法(04)