Python之网络爬虫(Xpath语法、Scrapy框架的认识)

一、Xpath语法

xpath是一门在XML文档中查找信息的语言
1、 节点(Node)

​ 元素、属性、文本、命名空间、文档(根)节点

2、 节点关系

​ 父(parent)

​ 子 (Children)

​ 同胞 (Sibling)

​ 先辈 (Ancestor)

​ 后代 (Descendant)

3、 xpath语法

表达式 描述
nodename 选取此节点的所有子节点
// 从任意子节点中选取(第一级)
/ 从根节点选取(下级)
. 选取当前节点(同级)
选取当前节点的父节点(上级)
@ 选取属性

4、 获取信息
text():获取文本信息

[last()-1]:倒数第二个,即最后一个 - 1

@class:选取class属性

position()<5:选取前4个

5、 解析器比较

解析器 速度 难度
re 最快
BeautifulSoup 非常简单
lxml 简单

6、Xpath练习

from lxml import etree
import requests

html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""


selector = etree.HTML(html_doc)
# 取出页面内所有的链接
links = selector.xpath('//p[@class="story"]/a/@href')
for link in links:
    print(link)

# 实例化一个etree选择器对象
r = requests.get('http://iguye.com/books.xml')
se = etree.HTML(r.text)
print(se.xpath('book'))

print(se.xpath('//book'))
# 选取书店下所有的书本的作者的名字
print(se.xpath('//bookstore/book/author/text()'))
# 选取书店下所有的书本的语言
print(se.xpath('//bookstore/book/title/@lang'))

# 选取书店下第一本书的标题
print(se.xpath('//bookstore/book[1]/title/text()'))
# 选取书店下最后一本书的标题
print(se.xpath('//bookstore/book[last()]/title/text()'))
# 选取书店下倒数第二本书的标题
print(se.xpath('//bookstore/book[last()-1]/title/text()'))
# 选取书店下前2本书的标题
print('前2本书',
      se.xpath('//bookstore/book[position()<3]/title/text()'))
# 选取所有的分类为web的书本
print('分类为web的书本', se.xpath('//book[@category="web"]/title/text()'))

# 选取所有价格大于30.00元的书本
print('价格大于30.00元的书本', se.xpath('//book[price>35.00]/price/text()'))

# 选取所有class属性中包含book的书本的class属性
print('类名中包含book的书本', se.xpath('//book[contains(@class, "book")]/@class'))

二、Scrapy框架的认识

在掌握了一定的爬虫基础之后,我们就可以使用一些框架来快速搭建起我们的爬虫程序,Scrapy就是一个非常搞笑的爬虫框架。
1、scrapy引擎工作流程
11
2、名词解释
Downloader (下载器):负责下载Scrapy Engine (引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎), 由引擎交给Spider来处理。
Spider (爬虫) :它负责处理所有Responses, 从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
Downloader Middlewares (下载中间件):可以当作是一一个可以自定义扩展下载功能的组件。
Spider Mi ddlewares(Spider中间件):可以理解为是一- 个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)。

3、制作一个Scrapy爬虫项目的步骤
1)安装Scrapy:pip install scrapy

2)创建项目:在终端输入,scrapy startproject tencentSpider,这里的项目名为tencentSpider

3)进入到项目中:cd tencentSpider

4)创建爬虫:scrapy genspider tencent career.tencent.com
这里的爬虫名为tencent,将来要访问的域名为career.tencent.com

5)运行爬虫:scrapy crawl tencent
这样一个基本的爬虫项目就完成了

4、利用Scrapy抓取数据,我们需要修改以下文件
settings.py:设置
注释了Robots协议;打开了Headers选项并设置了UA;打开了PIPELINES(用来保存文件的)
pipelines.py:保存的逻辑
tencent.py:抓取页面信息和继续跳转的设置
items.py:保存item的映射

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章