博客
关于我
使用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/

你可能感兴趣的文章
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>