使用背景:

  我们通常在爬去某个网站的时候都是爬去每个标签下的某些内容,往往一个网站的主页后面会包含很多物品或者信息的详细的内容,我们只提取某个大标签下的某些内容的话,会显的效率较低,大部分网站的都是按照固定套路(也就是固定模板,把各种信息展示给用户),LinkExtrator就非常适合整站抓取,为什么呢?因为你通过xpath、css等一些列参数设置,拿到整个网站的你想要的链接,而不是固定的某个标签下的一些链接内容,非常适合整站爬取。

 import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
link = LinkExtractor(restrict_xpaths='//ul[@class="cont_xiaoqu"]/li')
links = link.extract_links(response)
print(links)

links是一个list

我们来迭代一下这个list

         for link in links:
print(link)

links里面包含了我们要提取的url,那我们怎么才能拿到这个url呢?

直接在for循环里面link.url就能拿到我们要的url和text信息

         for link in links:
print(link.url,link.text)

别着急,LinkExtrator里面不止一个xpath提取方法,还有很多参数。

>allow:接收一个正则表达式或一个正则表达式列表,提取绝对url于正则表达式匹配的链接,如果该参数为空,默认全部提取。

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
pattern = '/gsschool/.+\.shtml'
link = LinkExtractor(allow=pattern)
links = link.extract_links(response)
print(type(links))
for link in links:
print(link)

>deny:接收一个正则表达式或一个正则表达式列表,与allow相反,排除绝对url于正则表达式匹配的链接,换句话说,就是凡是跟正则表达式能匹配上的全部不提取。

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
pattern = '/gsschool/.+\.shtml'
link = LinkExtractor(deny=pattern)
links = link.extract_links(response)
print(type(links))
for link in links:
print(link)

>allow_domains:接收一个域名或一个域名列表,提取到指定域的链接。

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
domain = ['gaosivip.com','gaosiedu.com']
link = LinkExtractor(allow_domains=domain)
links = link.extract_links(response)
print(type(links))
for link in links:
print(link)

>deny_domains:和allow_doains相反,拒绝一个域名或一个域名列表,提取除被deny掉的所有匹配url。

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
domain = ['gaosivip.com','gaosiedu.com']
link = LinkExtractor(deny_domains=domain)
links = link.extract_links(response)
print(type(links))
for link in links:
print(link)

>restrict_xpaths:我们在最开始做那个那个例子,接收一个xpath表达式或一个xpath表达式列表,提取xpath表达式选中区域下的链接。

>restrict_css:这参数和restrict_xpaths参数经常能用到,所以同学必须掌握,个人更喜欢xpath。

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
link = LinkExtractor(restrict_css='ul.cont_xiaoqu > li')
links = link.extract_links(response)
print(type(links))
for link in links:
print(link)

>tags:接收一个标签(字符串)或一个标签列表,提取指定标签内的链接,默认为tags=(‘a’,‘area’)

>attrs:接收一个属性(字符串)或者一个属性列表,提取指定的属性内的链接,默认为attrs=(‘href’,),示例,按照这个中提取方法的话,这个页面上的某些标签的属性都会被提取出来,如下例所示,这个页面的a标签的href属性值都被提取到了。

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor class WeidsSpider(scrapy.Spider):
name = "weids"
allowed_domains = ["wds.modian.com"]
start_urls = ['http://www.gaosiedu.com/gsschool/'] def parse(self, response):
link = LinkExtractor(tags='a',attrs='href')
links = link.extract_links(response)
print(type(links))
for link in links:
print(link)

前面我们讲了这么多LinkExtractor的基本用法,上面的只是为了快速试验,真正的基本用法是结合Crawler和Rule,代码如下

 # -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor
from scrapy.spiders.crawl import CrawlSpider,Rule class GaosieduSpider(CrawlSpider):
name = "gaosiedu"
allowed_domains = ["www.gaosiedu.com"]
start_urls = ['http://www.gaosiedu.com/']
restrict_xpath = '//ul[@class="schoolList clearfix"]'
allow = '/gsschool/.+\.shtml'
rules = {
Rule(LinkExtractor(restrict_xpaths=restrict_xpath), callback="parse_item", follow=True)
} def parse_item(self,response):
schooll_name = response.xpath('//div[@class="area_nav"]//h3/text()').extract_first()
print(schooll_name)

简单的说一下,上面我们本应该继承scrapy.Spider类,这里需要继承CrawlSpider类(因为CrawlSpider类也是继承了scrapy.Spider类),rules是基本写法,可不是随便哪个单词都可以的啊,而且注意rules必须是一个list或者dict,如果是tuple的话就会报错。里面的话Rule里面包含了几个参数,LinkExtractor就不在这里熬述了,看上面就行,至于其他的几个参数,可以看我们另外一篇博文:http://www.cnblogs.com/lei0213/p/7976280.html

python爬虫scrapy的LinkExtractor的更多相关文章

  1. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  2. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  3. python爬虫scrapy项目详解(关注、持续更新)

    python爬虫scrapy项目(一) 爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&st ...

  4. python爬虫scrapy框架

    Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...

  5. Python爬虫Scrapy框架入门(0)

    想学习爬虫,又想了解python语言,有个python高手推荐我看看scrapy. scrapy是一个python爬虫框架,据说很灵活,网上介绍该框架的信息很多,此处不再赘述.专心记录我自己遇到的问题 ...

  6. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  7. 安装python爬虫scrapy踩过的那些坑和编程外的思考

    这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬虫的比较发现开源爬虫scrapy比较好用.但是以前一直用的java和php,对python不熟悉,于是花一天时 ...

  8. Python 爬虫-Scrapy爬虫框架

    2017-07-29 17:50:29 Scrapy是一个快速功能强大的网络爬虫框架. Scrapy不是一个函数功能库,而是一个爬虫框架.爬虫框架是实现爬虫功能的一个软件结构和功能组件集合.爬虫框架是 ...

  9. python爬虫scrapy学习之篇二

    继上篇<python之urllib2简单解析HTML页面>之后学习使用Python比较有名的爬虫scrapy.网上搜到两篇相应的文档,一篇是较早版本的中文文档Scrapy 0.24 文档, ...

随机推荐

  1. python入门学习:9.文件和异常

    python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件  首先创建一个pi_ ...

  2. [CQOI2014]和谐矩阵

    嘟嘟嘟 遇到这种(看似)构造的题,我好像一般都做不出来-- 然而这题正解是高斯消元解异或方程组-- 首先我们容易列出式子a[i][j] ^ a[i - 1][j] ^ a[i + 1][j] ^ a[ ...

  3. foreach 引用传值&

    foreach  引用传值& php 怎么在foreach中循环数组   ,的时候添加元素跟值 foreach($arr as $key => &$vo){ //注意,由于上面遍 ...

  4. Linux之tmux学习

    Linux之tmux学习 前言 在Linux的世界中,命令行是最优雅的交互方式. 但是,只会使用一个交互终端的程序员,是不足以成为Linux下的大牛的. 那么tmux是什么,引用一下原文介绍 tmux ...

  5. Spring Security(二十):6.2.3 Form and Basic Login Options

    You might be wondering where the login form came from when you were prompted to log in, since we mad ...

  6. 初学Python—列表和元组

    一.什么是列表 列表是一系列数据的集合 二.列表的引用 首先定义一个列表 names=["alex","bob","alice"," ...

  7. autoware

    在 Autoware目录下执行 git checkout 将版本切换到1.10.0 因为最新版驱动有问题然后执行 sudo apt-get update sudo apt-get install -y ...

  8. bootstraptable 分页查询

    1.前端配置 2.后台输出格式化数据 1.前端配置 @{ Layout = null; } <!DOCTYPE html> <html> <head> <me ...

  9. 建一个网站python

    域名()+  服务器+ 源码 制作一个自己的网站.................

  10. 比官方文档更易懂的Vue.js教程!包你学会!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由蔡述雄发表于云+社区专栏 蔡述雄,现腾讯用户体验设计部QQ空间高级UI工程师.智图图片优化系统首席工程师,曾参与<众妙之门> ...