博客
关于我
使用Python和Scrapy进行Web爬虫的初学者指南。
阅读量:144 次
发布时间:2019-02-27

本文共 3453 字,大约阅读时间需要 11 分钟。

什么是网页抓取?

Web抓取包括收集网站上可用的数据。这可以由人类手动或通过机器人来完成。这是一个从网站提取信息和数据,并将获得的信息转换为结构化数据以进行进一步分析的过程。网络抓取也称为网络收集或网络数据提取。

需要网络抓取

网络抓取有助于获取数据以用于分析趋势,性能和价格监控。它可用于对消费者进行情感分析,以获取新闻文章洞察,市场数据汇总,还用于预测分析和许多自然语言处理项目。网络抓取中使用了各种python库,其中包括:

  • Pattern
  • Scrapy
  • Beautiful soup
  • Requests, Merchandize ,Selenium etc.

Scrapy是一个用python编写的完整的webscraping框架,负责下载HTML进行解析。然而,美丽的汤是一个用于从HTML解析和提取数据的库。

网络抓取涉及的步骤

  1. 文档加载/下载:加载整个HTML页面
  2. 解析和提取:解释文档并从文档中收集信息
  3. 转换:转换收集的数据。

对于下载,使用python请求库下载html页面。Scrapy有其内置的请求方法。

尽管解析文档时,有必要熟悉超文本标记语言(HTML)。HTML是用于创建网页的标准标记语言。它由一系列元素/标记名组成,可告诉浏览器如何显示内容。HTML元素由

<start tag>Content here</end tag>

HTML可以表示为包含标签名称/节点的树状结构,其中节点之间存在关系,包括父,子,兄弟姐妹等

下载后,使用CSS选择器或XPATH定位器从HTML源中提取数据

XPath被定义为XML路径。它是使用XML路径表达式在网页上查找任何元素的语法或语言。XPath用于使用HTML DOM结构查找网页上任何元素的位置。

XPATH定位器入门

绝对Xpath:它包含从根元素到所需元素的完整路径。

相对Xpath:这更像是简单地从引用所需元素开始并从特定位置开始。您始终使用相对路径来测试元素

带有说明的XPATH示例

我创建了该HTML脚本来进行练习,复制并另存为(.html)与描述一起使用

     Store              

MUSIC

Hip-Hop

  • Travis Scott
  • Pop Smoke

K-pop

  • G Dragon
  • Super Junior

BOOKS

Fiction

  • The Beetle

  • The Bell Jar

  • The Book Thief

Horror

复制

创建的HTML在下面的图片中生成网页

在浏览器(Chrome)链接上练习XPATH和CSS定位器

  1. 按F12打开Chrome DevTools。
  2. 默认情况下应打开“元素”面板。
  3. 按Ctrl + F启用面板中的DOM搜索。
  4. 输入XPath或CSS选择器进行评估。
  5. 如果存在匹配的元素,它们将在DOM中突出显示。

字符

  • 节点名-选择具有给定名称的节点
  • “ /”从根节点开始选择
  • “ //”-忽略上一代标签,并从与选择匹配的当前节点开始
  • “ @”-选择“给定属性的节点”,我将使用XPATH和上面的HTML文档来

选择第二个HipHop

绝对路径:- /html/body/musicshop/genre/ul/li[2]未指定索引默认为1

相对路径: -//musicshop//li[2] 要提取,我们包括名称/text()

赋予//musicshop//li[2]/text()

按属性名称选择

//bookstore/bookgenre[@class='fiction'] ```

//bookstore/bookgenre[contains(@class,'fiction')] 也可以使用

Web爬行

我们将从奈拉兰德(Nairaland)第一页中提取新闻链接和主题 。

首先,我们检查Nairaland和我们将要使用的xpath Locator

对于链接: //table[@summary='links]//a/@href

对于Topic://table[@summary='links]//a/text() 应该是直接的解决方案,但是

标记中包含文本 ,因此我们将使用//table[contains(@class,'boards')][2]//tr[2]//a[descendant-or-self::text()]

之后,我们掌握了主要信息,因此我们导入了我们的图书馆

import scrapyfrom scrapy.crawler import CrawlerProcess

我们创建蜘蛛类,并从scrapy继承一个Spider

class Spider(scrapy.Spider):  name = 'yourspider'  # start_requests method  def start_requests( self ):    yield scrapy.Request(url = "https://www.nairaland.com/", callback=self.parse)  def parse(self, response):    blocks = response.xpath("//table[contains(@class,'boards')][2]//tr[2]")    News_Titles = blocks.xpath(".//a[descendant-or-self::text()]").extract()    News_Links= blocks.xpath(".//a/@href").extract()    for crs_title, crs_descr in zip( News_Titles, News_Links ):      dc_dict[crs_title] = crs_descr

所以我们开始我们的爬虫程序

process = CrawlerProcess()process.crawl(Spider)process.start()print(dc_dict)

在这里还是要推荐下我自己建的Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

转载地址:http://locb.baihongyu.com/

你可能感兴趣的文章
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>
mysql 死锁(先delete 后insert)日志分析
查看>>
MySQL 死锁了,怎么办?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 深度分页性能急剧下降,该如何优化?
查看>>
MySQL 添加列,修改列,删除列
查看>>
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>
MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
查看>>
mysql 用户管理和权限设置
查看>>
MySQL 的 varchar 水真的太深了!
查看>>