asp.net 抓取网页数据(做一个简单的爬虫程序有以下几个步骤(图))
优采云 发布时间: 2022-01-30 00:09asp.net 抓取网页数据(做一个简单的爬虫程序有以下几个步骤(图))
简单来说,爬虫通过程序或脚本获取网页上的一些文字、图片和音频数据。
从笔者的经验来看,制作一个简单的爬虫程序有几个步骤:建立需求、下载网页、分析解析网页、保存。接下来可以按照作者的流程,写一个抓取豆瓣图书信息的爬虫。
1、要求
以豆瓣阅读为例,我们抓取豆瓣的图书信息,我们需要获取的信息包括:书名、出版商、作者、年份、评分。
2、网站下载
页面下载分为静态下载和动态下载两种方式。
静态主要是纯html页面,动态是会经过javascript处理,通过Ajax异步获取的页面。在这里,我们正在下载静态页面。
在下载网页的过程中,我们需要用到网络库。Python 内置了 urllib 和 urllib2 网络库,但我们一般使用基于 urllib3 的第三方库 Requests,它是 Python 爱好者喜爱的更高效简洁的网络库,可以满足我们当前的 web 需求。
3、网页分析分析
1)网页分析:
选择好网络库后,我们需要做的是:分析我们要爬取的路径——也就是逻辑。
在这个过程中,我们需要找到每一个爬取的入口,比如豆瓣阅读的页面。知道书标的url,点击每个url获取书单,将需要的书信息存储在书单中,了解如何获取书信息。
太简单!我们的爬取路径是:图书标签url—>图书列表—>图书信息。
2)网页分析:
网页解析主要是通过解析网页的源代码来获取我们需要的数据。解析网页的方式有很多种,比如正则表达式、BeautifulSoup、XPath等,这里我们使用XPath。Xpath 的语法很简单,它是根据路径来定位的。
比如上海的位置是Earth-China-Shanghai,语法表达是 // Earth/China [@city name=Shanghai]
接下来,我们需要解析网页,得到书的tag标签的url。打开网页,右键选择inspect元素,就会出现调试工具。点击左上角得到我们需要的数据,下面的调试窗口会直接定位到它所在的代码。
根据它的位置,写出它的Xpath解析公式://table[@class='tagCol']//a
在这里,我们在一个选项卡下的一个选项卡的一个选项卡中看到了小说。可以使用 class 属性定位标签。
下面是获取标签url的代码:
拿到标签后,我们还需要拿到书的信息。让我们解析图书列表页面:
解析后的代码如下:
爬取信息如下:
4、数据存储
获取到数据后,我们可以选择将数据保存到数据库中,或者直接写入文件中。这里我们将数据保存到mongodb。接下来做一些统计,比如使用图表插件echarts来展示我们的统计结果。
5、爬虫相关问题
1)网站限制:
在爬取过程中,可能会出现无法爬取数据的问题。这是因为对应的网站做了一些反爬处理来限制爬取。比如爬豆瓣的时候遇到403forbidden。该怎么办?这时候可以通过一些相应的方法来解决,比如使用代理服务器,降低爬取速度等。这里我们使用sleep 2 seconds per request。
2)URL 去重:
URL去重是爬虫操作的关键步骤。由于正在运行的爬虫主要被阻塞在网络交互中,因此避免重复的网络交互非常重要。爬虫一般将要爬取的 URL 放入队列中,从爬取的网页中提取新的 URL。在将它们放入队列之前,它们必须首先确保这些新 URL 未被抓取。如果之前已经爬过,不再放入队列中。
3)并发操作:
Python中并发操作涉及的主要模型有:多线程模型、多进程模型、协程模型。在 Python 中,可以通过 threading 模块、multiprocessing 模块和 gevent 库来实现多线程、多进程或协程并发操作。
scrapy - 强大的爬虫框架
说到爬虫,就不得不提Scrapy。Scrapy 是一个用 Python 开发的快速、高级的爬虫框架,用于爬取网站并从页面中提取结构化数据。Scrapy 用途广泛,可用于数据挖掘、监控和自动化测试。
Scrapy 的吸引力在于它是一个任何人都可以根据自己的需要轻松修改的框架。它还为各种类型的爬虫提供了基类,例如BaseSpider、站点地图爬虫等。
scrapy的架构:
请点击此处输入图片说明
绿线是数据流。首先,从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载。下载后会交给Spider进行分析。待保存的数据将被发送到 Item Pipeline 进行数据后处理。
此外,可以在数据流通道中安装各种中间件,进行必要的处理。因此,在开发爬虫时,最好先规划好各个模块。
笔记:
Xpath 教程:
索取官方文件:
更多Scrapy,请参考:
本文作者:胡雨涵(点融刚),在点融网工程部基础设施团队担任运维开发工程师。热爱自然,热爱生活。
本文由@点融帮(ID:DianrongMafia)原创发表于今日头条,未经允许禁止转载。