爬取饿了么官网数据 scrapy

如题所述

Scrapy框架的初步运用

上午刚配置好scrapy框架,下午我就迫不及待的做了一个小demo来测试一下,结果证明scrapy真是太强大了。我感觉等对它掌握到炉火纯青的地步后,就没有什么数据是爬不到的了,O(∩_∩)O哈哈~。

以下步骤是建立在成功安装并配置好scrapy的基础上的.

1.新建一个Scrapy项目

打开cmd控制台界面 
输入:scrapy startproject myScrapy

下面是创建的工程中所包含的文件:

__init__.py:项目的初始化文件; 
items.py:项目的目标文件 
pipelines.py:项目的管道文件 
settings.py:项目的设置文件 
spiders/:存放爬虫代码的文件 
spiders/__init__.py:爬虫的初始话文件

2.定义Item

Items是保存爬取到的数据的容器,其使用方法和python字典类似, 它提供了额外保护机制来避免拼写错误导致的未定义字段错误,这类似与ORM中的映射关系。

这是items.py中的默认代码:

import scrapyclass mySpiderItem(scrapy.Item):
#name = scrapy.Field()
pass12345

我们对其进行修改:(我需要爬到数据为 姓名、职业和详细信息)

import scrapyclass MyspiderItem(scrapy.Item):
# 这是你需要爬到的数据所包含的字段
name = scrapy.Field()
title = scrapy.Field()
info = scrapy.Field()    pass123456789

3.创建爬虫文件

在 spiders/ 下创建文件 demo_spider.py . 
然后NotePad++打开该文件,添加如下代码:

import scrapy#引用mySpider目录下的item.py中的MyspiderItemfrom mySpider.items import MyspiderItemclass Demo_Spider(scrapy.Spider):
#爬虫名,该值必须唯一
name = "demo"
#爬虫的爬取域(我要拿传智的数据)
allowed_domains = ["itcast.cn"]    #起始的URL列表,也就是第一批请求的地址
start_urls = [        "htt/channel/teacher.shtml"
]    #pase方法负责解析返回的数据response data、获得要提取的数据item,以及生成需要进一步处理URL的Request对象。
def parse(self, response):
#获取的数据集
node_list = response.xpath("//div[@class='li_txt']")
for node in node_list:
item = MyspiderItem()            #.extract()将xpath对象转换为Unicode字符串
name = node.xpath("./h3/text()").extract()
title = node.xpath("./h4/text()").extract()
info = node.xpath("./p/text()").extract()
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0]            #yield :获得一个item数据后暂停循环,然后将它交给管道,之后继续进行循环
yield item12345678910111213141516171819202122232425262728293031

4.修改setting文件

打开setting.py文件,修改ROBOTSTXT_OBEY为false,避免某些网站禁止爬虫导致不能爬取数据。

# Obey robots.txt rulesROBOTSTXT_OBEY = False12

取消ITEM_PIPELINES的的注释,该项定义了管道的优先级,数值越小优先级越高

ITEM_PIPELINES = {    'Tencent.pipelines.TencentPipeline': 300,
}123

5.修改管道执行文件

这是默认的管道文件:

import jsonclass MyspiderPipeline(object):
def process_item(self, item, spider):
pass       12345

我们修改它,如下:

import jsonclass MyspiderPipeline(object):
def __init__(self):
self.f = open("demo.json","wb+")    #该方法是必要的
def process_item(self, item, spider):
content = json.dumps(dict(item),ensure_ascii = False) + ",\n"
self.f.write(content.encode("utf-8"))        return item    def colse_spider(self,spider):
self.f.close()1234567891011121314

添加__init__方法,管道事件第一次执行时,创建demo.json文件,并打开。

添加colse_spider方法,管道事件结束时,关闭文件。

修改process_item方法,将Demo_Spider中获得的item数据存到demo.json文件中。

5.启动spider

在mySpider目录中,创建一个data文件夹,用来存放爬取的数据文件。

输入:mkdir data,然后:cd data/ 

使用命令:scrapy crawl demo 

可以看到,执行完成的详细信息。

demo.json文件中获得了需要的数据。

爬取网站数据的简单例子就这样完成了,相信深入学习之后,肯定能实现非常强大的抓取数据功能。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-08-02
八爪鱼采集器是一款功能全面、操作简单、适用范围广泛的互联网数据采集器,可以帮助您快速采集各类网站的数据。对于爬取饿了么官网数据,您可以使用八爪鱼采集器的智能识别和自定义采集规则功能来实现。以下是一般的采集步骤:1. 打开八爪鱼采集器,并创建一个新的采集任务。2. 在任务设置中,输入饿了么官网的网址(https://www.ele.me)作为采集的起始网址。3. 配置采集规则。可以使用智能识别功能,让八爪鱼自动识别饿了么官网页面的数据结构,或者手动设置采集规则。4. 如果手动设置采集规则,可以通过鼠标选择页面上的数据元素,如商品名称、价格、评分等,并设置相应的采集规则,以确保正确获取所需的数据。5. 设置翻页规则。由于饿了么官网的商品可能分页显示,需要设置八爪鱼采集器自动翻页,以获取更多的数据。6. 运行采集任务。确认设置无误后,可以启动采集任务,让八爪鱼开始采集饿了么官网上的数据。7. 等待采集完成。八爪鱼将根据设置的规则自动抓取页面上的数据,并将其保存到本地或导出到指定的数据库等。八爪鱼采集器支持多种数据导出格式,包括Excel、CSV、HTML、数据库等,方便您进行后续的数据分析和处理。八爪鱼为用户准备了一系列简洁易懂的教程,帮助大家快速掌握采集技巧,轻松应对各类网站数据采集,请前往官网教程与帮助了解更多详情。