本文共 3453 字,大约阅读时间需要 11 分钟。
什么是网页抓取?
Web抓取包括收集网站上可用的数据。这可以由人类手动或通过机器人来完成。这是一个从网站提取信息和数据,并将获得的信息转换为结构化数据以进行进一步分析的过程。网络抓取也称为网络收集或网络数据提取。
需要网络抓取
网络抓取有助于获取数据以用于分析趋势,性能和价格监控。它可用于对消费者进行情感分析,以获取新闻文章洞察,市场数据汇总,还用于预测分析和许多自然语言处理项目。网络抓取中使用了各种python库,其中包括:
Scrapy是一个用python编写的完整的webscraping框架,负责下载HTML进行解析。然而,美丽的汤是一个用于从HTML解析和提取数据的库。
网络抓取涉及的步骤
对于下载,使用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
House of Leaves
The Hanting of Hill House
创建的HTML在下面的图片中生成网页
在浏览器(Chrome)链接上练习XPATH和CSS定位器
字符:
选择第二个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)
转载地址:http://locb.baihongyu.com/