Scrapy框架之selecter.xpath()函数的语法总结

Xpath(XML的语法规则)语法规则官方手册:http://www.w3school.com.cn/xpath/xpath_syntax.asp

具体用法总结:(函数部分参考xml手册)

 html = '''
        <div>
            <ul>
            <li class="toctree-l1"><a class="reference internal" href="intro/overview.html">Scrapy at a glance</a></li>
            <li class="toctree-l1"><a class="reference internal" href="intro/install.html">Installation guide</a></li>
            <li class="toctree-l1"><a class="reference internal" href="intro/tutorial.html">Scrapy Tutorial</a></li>
            <li class="toctree-l1"><a class="reference internal" href="intro/examples.html">Examples</a></li>
            </ul>
            <p class="caption"><span class="caption-text">Basic concepts</span></p>
            <ul>
            <li class="toctree-l1"><a class="reference internal" href="topics/commands.html">Command line tool</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/spiders.html">Spiders</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/selectors.html">Selectors</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/items.html">Items</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/loaders.html">Item Loaders</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/shell.html">Scrapy shell</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/item-pipeline.html">Item Pipeline</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/feed-exports.html">Feed exports</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/request-response.html">Requests and Responses</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/link-extractors.html">Link Extractors</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/settings.html">Settings</a></li>
            <li class="toctree-l1"><a class="reference internal" href="topics/exceptions.html">Exceptions</a></li>
            </ul>
        </div>

        '''

        sel = Selector(text=html)

        xpath是基于XML的路径寻找,"/"代表html根路径
        path001 = sel.xpath("/")

        xpath是基于XML的路径寻找,"//"代表html根后代的子元素(html后代所以ul元素)
        path002 = sel.xpath("//ul")

        xpath是基于XML的路径寻找,".//"代表当前目录下所以后代的子元素(当前div目录后代所以ul元素)
        path003 = sel.xpath(".//ul")

        当前节点元素(div)
        path004 = sel.xpath(".")

        ul的父亲:div
        path005 = sel.xpath(".//ul/..")

        xpath获取文本值text()函数
        path005 = sel.xpath(".//li/a/text()")

        xpath获取属性值函数@属性名
        path005 = sel.xpath(".//li/a/@href")


        最后:[谓语]的用法,[1]、[last()]、()[1]、((1)[])

        xpath[谓语]的用法之一: 不带()的用法
        path = sel.xpath("//ul[2]/li[3]/a/text()")

        xpath[谓语]的用法之一: 带()的用法
        特别注意:(//li)[2]如何后面还要查询子元素,必须加()
        node = sel.xpath("( (//li)[2] )/a/text()")

        [谓语]运法之last()函数变量运算
        path = sel.xpath("(//li)[last()-2]/a/text()")

        [谓语]运法之position()函数变量运算
        path = sel.xpath("(//li)[position() <= 3]/a/text()")

 

可以使用 Scrapy 框架XPath 选择器来爬取 www.runoob.com 网页图片,具体步骤如下: 1. 创建 Scrapy 项目并定义 Item 在命令行中输入以下命令,创建一个名为 `runoob` 的 Scrapy 项目: ``` scrapy startproject runoob ``` 然后在 `runoob` 项目文件夹下的 `items.py` 文件中定义 `RunoobItem`,用于存储爬取到的图片信息: ```python import scrapy class RunoobItem(scrapy.Item): image_urls = scrapy.Field() images = scrapy.Field() ``` 2. 创建 Spider 并编写爬虫逻辑 在 `runoob` 项目文件夹下的 `spiders` 文件夹中创建名为 `image_spider.py` 的文件,并编写如下代码: ```python import scrapy from runoob.items import RunoobItem class ImageSpider(scrapy.Spider): name = 'image_spider' allowed_domains = ['www.runoob.com'] start_urls = ['https://www.runoob.com/'] def parse(self, response): item = RunoobItem() # 提取所有图片链接 item['image_urls'] = response.xpath('//img/@src').extract() yield item ``` 在 `ImageSpider` 中,我们首先定义了爬虫的名称 `name`、允许爬取的域名 `allowed_domains` 和起始爬取的 URL 列表 `start_urls`。然后在 `parse` 方法中使用 XPath 选择器提取页面中所有的图片链接,并将其存储到 `item` 中。最后使用 `yield` 将 `item` 传递给 Scrapy 引擎。 3. 配置 Scrapy Pipeline 在 `runoob` 项目文件夹下的 `settings.py` 文件中,添加如下配置: ```python ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1} IMAGES_STORE = 'images/' ``` 在这里我们使用 Scrapy 内置的 `ImagesPipeline` 来下载图片,并将下载的图片保存到 `images/` 目录下。 4. 运行爬虫 在命令行中进入 `runoob` 项目文件夹,输入以下命令启动爬虫: ``` scrapy crawl image_spider ``` Scrapy 就会自动爬取 www.runoob.com 页面中的所有图片,并将其下载到 `images/full/` 目录下。 注意:如果运行过程中出现错误,可以尝试安装 Pillow 库(用于处理图片),并重启命令行窗口再次运行爬虫: ``` pip install Pillow ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值