使用Python和Scrapy进行Web爬虫的初学者指南。

什么是网页抓取?

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)与描述一起使用

<html>
     <head><title>Store</title></head>
     <body>
         <musicshop id="music"><p><h2>MUSIC</p></h2>
            <genre><h3><p>Hip-Hop</p></h3>
                <ul>
                    <li>Travis Scott</li>
                    <li>Pop Smoke</li>
                </ul>
            </genre>
            <genre country="korea"><h3><p>K-pop</p></h3>
                <ul>
                    <li>G Dragon</li>
                    <li>Super Junior</li>
                </ul>
            </genre>
        </musicshop>
        <bookstore id='book'><p><h2>BOOKS</p></h2>
            <bookgenre class = "fiction"><p><h3>Fiction</h2></p>
                <ul>
                    <li><booktitle><h5><p>The Beetle</p></h5></booktitle></li>
                    <li><booktitle><h5><p>The Bell Jar</p></h5></booktitle></li>
                    <li><booktitle><h5><p>The Book Thief</p></h5></booktitle></bookgenre></li>
                </ul>
            <bookgenre class="horror"><p><h2>Horror</h2></p>
                <ul>
                    <li><booktitle><h5><p><a href='www.goodreads.com/book/show/3999177-the-bad-seed'>The Bad Seed</a></p></h5></booktitle></li>
                    <li><booktitle><h5><p>House of Leaves</p></h5></booktitle></li>
                    <li><booktitle><h5><p>The Hanting of Hill House</p></h5></booktitle></bookgenre></li>
                </ul>
        </bookstore>
    </body>
</html>
复制

创建的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 scrapy

from 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感兴趣的小伙伴加入!

猜你喜欢

转载自blog.csdn.net/aaahtml/article/details/113029974
今日推荐