web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

标签选择器对象

HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象
需要导入模块:from scrapy.selector import HtmlXPathSelector

select()标签选择器方法,是HtmlXPathSelector里的一个方法,参数接收选择器规则,返回列表元素是一个标签对象

extract()获取到选择器过滤后的内容,返回列表元素是内容

选择器规则

  //x 表示向下查找n层指定标签,如://div 表示查找所有div标签
  /x 表示向下查找一层指定的标签
  /@x 表示查找指定属性,可以连缀如:@id @src
  [@class="class名称"] 表示查找指定属性等于指定值的标签,可以连缀 ,查找class名称等于指定名称的标签
  /text() 获取标签文本类容
  [x] 通过索引获取集合里的指定一个元素

如果你依然在编程的世界里迷茫,可以加入我们的Python学习扣qun:784758214,看看前辈们是如何学习的。交流经验。从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

获取指定的标签对象

# -*- coding: utf-8 -*-
import scrapy       #导入爬虫模块
from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块
from urllib import request                     #导入request模块
import os

class AdcSpider(scrapy.Spider):
    name = ‘adc‘                                        #设置爬虫名称
    allowed_domains = [‘www.shaimn.com‘]
    start_urls = [‘http://www.shaimn.com/xinggan/‘]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)               #创建HtmlXPathSelector对象,将页面返回对象传进去

        items = hxs.select(‘//div[@class="showlist"]/li‘)  #标签选择器,表示获取所有class等于showlist的div,下面的li标签
        print(items)                                       #返回标签对象

循环获取到每个li标签里的子标签,以及各种属性或者文本

# -*- coding: utf-8 -*-
import scrapy       #导入爬虫模块
from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块
from urllib import request                     #导入request模块
import os

class AdcSpider(scrapy.Spider):
    name = ‘adc‘                                        #设置爬虫名称
    allowed_domains = [‘www.shaimn.com‘]
    start_urls = [‘http://www.shaimn.com/xinggan/‘]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)               #创建HtmlXPathSelector对象,将页面返回对象传进去

        items = hxs.select(‘//div[@class="showlist"]/li‘)  #标签选择器,表示获取所有class等于showlist的div,下面的li标签
        # print(items)                                     #返回标签对象
        for i in range(len(items)):                        #根据li标签的长度循环次数
            title = hxs.select(‘//div[@class="showlist"]/li[%d]//img/@alt‘ % i).extract()   #根据循环的次数作为下标获取到当前li标签,下的img标签的alt属性内容
            src = hxs.select(‘//div[@class="showlist"]/li[%d]//img/@src‘ % i).extract()     #根据循环的次数作为下标获取到当前li标签,下的img标签的src属性内容
            if title and src:
                print(title,src)  #返回类容列表

将获取到的图片下载到本地

urlretrieve()将文件保存到本地,参数1要保存文件的src,参数2保存路径
urlretrieve是urllib下request模块的一个方法,需要导入from urllib import request

# -*- coding: utf-8 -*-
import scrapy       #导入爬虫模块
from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块
from urllib import request                     #导入request模块
import os

class AdcSpider(scrapy.Spider):
    name = ‘adc‘                                        #设置爬虫名称
    allowed_domains = [‘www.shaimn.com‘]
    start_urls = [‘http://www.shaimn.com/xinggan/‘]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)               #创建HtmlXPathSelector对象,将页面返回对象传进去

        items = hxs.select(‘//div[@class="showlist"]/li‘)  #标签选择器,表示获取所有class等于showlist的div,下面的li标签
        # print(items)                                     #返回标签对象
        for i in range(len(items)):                        #根据li标签的长度循环次数
            title = hxs.select(‘//div[@class="showlist"]/li[%d]//img/@alt‘ % i).extract()   #根据循环的次数作为下标获取到当前li标签,下的img标签的alt属性内容
            src = hxs.select(‘//div[@class="showlist"]/li[%d]//img/@src‘ % i).extract()     #根据循环的次数作为下标获取到当前li标签,下的img标签的src属性内容
            if title and src:
                # print(title[0],src[0])                                                    #通过下标获取到字符串内容
                file_path = os.path.join(os.getcwd() + ‘/img/‘, title[0] + ‘.jpg‘)          #拼接图片保存路径
                request.urlretrieve(src[0], file_path)                          #将图片保存到本地,参数1获取到的src,参数2保存路径

xpath()标签选择器,是Selector类里的一个方法,参数是选择规则【推荐】

选择器规则同上

selector()创建选择器类,需要接受html对象
需要导入:from scrapy.selector import Selector

# -*- coding: utf-8 -*-
import scrapy       #导入爬虫模块
from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块
from scrapy.selector import Selector

class AdcSpider(scrapy.Spider):
    name = ‘adc‘                                        #设置爬虫名称
    allowed_domains = [‘www.shaimn.com‘]
    start_urls = [‘http://www.shaimn.com/xinggan/‘]

    def parse(self, response):
        items = Selector(response=response).xpath(‘//div[@class="showlist"]/li‘).extract()
        # print(items)                                     #返回标签对象
        for i in range(len(items)):
            title = Selector(response=response).xpath(‘//div[@class="showlist"]/li[%d]//img/@alt‘ % i).extract()
            src = Selector(response=response).xpath(‘//div[@class="showlist"]/li[%d]//img/@src‘ % i).extract()
            print(title,src)

正则表达式的应用

正则表达式是弥补,选择器规则无法满足过滤情况时使用的,

分为两种正则使用方式

  1、将选择器规则过滤出来的结果进行正则匹配

  2、在选择器规则里应用正则进行过滤

1、将选择器规则过滤出来的结果进行正则匹配,用正则取最终内容

最后.re(‘正则‘)

# -*- coding: utf-8 -*-
import scrapy       #导入爬虫模块
from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块
from scrapy.selector import Selector

class AdcSpider(scrapy.Spider):
    name = ‘adc‘                                        #设置爬虫名称
    allowed_domains = [‘www.shaimn.com‘]
    start_urls = [‘http://www.shaimn.com/xinggan/‘]

    def parse(self, response):
        items = Selector(response=response).xpath(‘//div[@class="showlist"]/li//img‘)[0].extract()
        print(items)                                     #返回标签对象
        items2 = Selector(response=response).xpath(‘//div[@class="showlist"]/li//img‘)[0].re(‘alt="(\w+)‘)
        print(items2)

# <img src="http://www.shaimn.com/uploads/170724/1-1FH4221056141.jpg" alt="人体艺术mmSunny前凸后翘性感诱惑写真">
# [‘人体艺术mmSunny前凸后翘性感诱惑写真‘]

2、在选择器规则里应用正则进行过滤

[re:正则规则]

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
# -*- coding: utf-8 -*-
import scrapy       #导入爬虫模块
from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块
from scrapy.selector import Selector

class AdcSpider(scrapy.Spider):
    name = ‘adc‘                                        #设置爬虫名称
    allowed_domains = [‘www.shaimn.com‘]
    start_urls = [‘http://www.shaimn.com/xinggan/‘]

    def parse(self, response):
        items = Selector(response=response).xpath(‘//div‘).extract()
        # print(items)                                     #返回标签对象
        items2 = Selector(response=response).xpath(‘//div[re:test(@class, "showlist")]‘).extract()  #正则找到div的class等于showlist的元素
        print(items2)

原文地址:https://blog.51cto.com/14510224/2432988

时间: 2024-08-19 00:30:46

web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签的相关文章

scrapy中的选择器下载中间价downloadmiddlewares

下载中间件 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和response的一个轻量.底层的系统. 1.激活下载中间件 要激活下载器中间件组件,将其加入到  DOWNLOADER_MIDDLEWARES  设置中. 该设置是一个字典(dict),键为中间件类的路径,值为其中间件的顺序(order). eg: DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.Custo

在html使用a标签 直接下载图片 不通过后台实现直接下载

由于a标签在HTML中链接图片会被识别并打开到网页上 如果想下载这个图片的话 就需要连接到后台读取文件并生成一个头信息下载.不过可以先给a标签加上一个download属性即可直接下载了. <a href="__PUBLIC__/static/images/bg.jpg" download="" target="_blank">下载图片</a> 比如thinkphp中就可以这样写

css之标签选择器

标签(空格分隔): 标签选择器 选择器定义: 在一个HTML页面中会有很多很多的元素,不同的元素可能会有不同的样式,某些元素又需要设置相同的样式,选择器就是用来从HTML页面中查找特定元素的,找到元素之后就可以为它们设置样式了.选择器为样式规则指定一个作用范围. 基础选择器包含: 1.标签选择器 2.类选择器 3.ID选择器 4.通用选择器 标签选择器: 顾名思义通过标签名来选择元素: 例如: p { color: red; } 将所有的p标签设置字体颜色为红色. 如下代码: <!DOCTYPE

HTML连载16-颜色控制属性2&amp;标签选择器

一.颜色控制属性(上接连载15) (4)十六进制 在前端开发中通过十六进制来表示颜色,其实本质就是RGB,十六进制中是通过每两位表示一个颜色. 例如:#FFEE00,其中FF代表的是R,EE代表的G,00代表的就是B 注:十六进制和十进制的转换公示,请自行百度 (5)在CSS中只要是十六进制的颜色每两位都是一样的,那么就可以简写为一位. 例如:#FFEE00可以写为#FE0 注:如果当前颜色对应的两位数字不一样,那么不能简写:如果两位相同的数字不是属于同一种颜色,也不能简写 <head> &l

第三百二十四节,web爬虫,scrapy模块介绍与使用

第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. Scrapy 使用了 Twisted异步网络库来处理网络通讯.

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安装scrapy模块以及依赖模块 安装以下模块 1.lxml-3.8.0.tar.gz (XML处理库) 2.Twisted-17.5.0.tar.bz2 (用Python编写的异步网络框架) 3.Scrapy-1.4.0.tar.gz

我的第一个python爬虫程序(从百度贴吧自动下载图片)

这个学期开设了编译原理和形式语言与自动机,里面都有介绍过正则表达式,今天自己学了学用python正则表达式写爬虫 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成

Day3-scrapy爬虫下载图片自定义名称

学习Scrapy过程中发现用Scrapy下载图片时,总是以他们的URL的SHA1 hash值为文件名,如: 图片URL:http://www.example.com/image.jpg 它的SHA1 hash值为:3afec3b4765f8f0a07b78f98c07b83f013567a0a 则下载的图片为:3afec3b4765f8f0a07b78f98c07b83f013567a0a.jpg 目的是下载的图片为:image.jpg或者xxx.jpg 可以通过编写Pipeline来实现. 以

Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片,在博客园不能用 CSDN 的图片. 当前想到的方案就是:先把 CSDN 上的图片都下载下来,再手动更新吧. 所以简单写了一个爬虫用来下载 CSDN 平台上的图片,用于在其他平台上更新图片时用 更多内容,请看代码注释 效果演示 Python 源代码 提示: 需要先下载 BeautifulSoup 哦,