欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scrapy爬虫Xpath编写规则梳理

程序员文章站 2024-01-27 14:26:58
...

进入浏览器的开发者模式(F12),选取需要获取的节点,如果我们想获取一个列表,例如:
Scrapy爬虫Xpath编写规则梳理

在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()更好些。

如果当前的列表包含分页,如图所示:

Scrapy爬虫Xpath编写规则梳理
我们要获取每个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