打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
4、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] 通过索引获取集合里的指定一个元素**

获取指定的标签对象

# -*- coding: utf-8 -*-import scrapy       #导入爬虫模块from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块from urllib import request                     #导入request模块import osclass 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)                                       #返回标签对象

Python资源分享裙:855408893 内有安装包,学习视频资料,每天更新技术。这里是Python学习者的聚集地,零基础,进阶,都欢迎点击Python资源分享

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

# -*- coding: utf-8 -*-import scrapy       #导入爬虫模块from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块from urllib import request                     #导入request模块import osclass 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 osclass 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 Selectorclass 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 Selectorclass 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="//www.shaimn.com/uploads/170724/1-1FH4221056141.jpg" alt="人体艺术mmSunny前凸后翘性感诱惑写真"># ['人体艺术mmSunny前凸后翘性感诱惑写真']

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

[re:正则规则]

# -*- coding: utf-8 -*-import scrapy       #导入爬虫模块from scrapy.selector import HtmlXPathSelector  #导入HtmlXPathSelector模块from scrapy.selector import Selectorclass 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)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
学会Python这几个类库使用,快速写爬虫不是问题(详细步骤附源码)
小白学 Python 爬虫(35):爬虫框架 Scrapy 入门基础(三) Selector 选择器
Python大佬批量爬取中国院士信息,告诉你哪个地方人杰地灵
一个1000元的爬虫外包项目,三种爬虫模式给你轻松做出来
在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)
jQuery选择器大全
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服