scrapy爬虫简单入门示例

scrapy笔记

步骤:

1.创建项目。

win + R 输入cmd调出命令行窗口,使用cd命令调整到要放项目的文件位置,输入scrapy startproject xxx(项目名称)命令创建项目

例如:在cmd窗口中输入scrapy startproject newsbaiduspider回车。
创建命令截图
在项目文件夹下会生成两个文件
项目文件夹下的文件截图
第一个文件夹是编写代码的文件,第二个.cfg文件为项目的配置文件部署在服务器时使用的。
newsbaiduspider文件下有一个文件夹和五个python文件。
newsbaiduspider文件下的文件
整体的项目结构和文件的作用如下:
文件结构及作用
2.创建一个爬虫在项目文件夹下cmd窗口运行。
scrapy genspider xxx(爬虫名称)xxx.com(目标域名)
创建爬虫
运行完成后将在spider文件夹下生成一个爬虫文件
创建爬虫文件
注意爬虫文件的名字不要和项目的名称一样,不然会创建失败。

3.编写爬虫前的准备工作。

  1. 进入settings.py 将robots协议在settings.py中将ROBOTSTXT_OBEY 设为 False。
  2. 设置请求头(作用将爬虫伪装成浏览器浏览防止ip被封)。进入settings.py 文件设置USER_AGENT。
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

请求头的内容不需要刻意记忆可以随便打开一个网页,然后F12进入开发者工具,按图示步骤走(network没有内容的化根据提示ctrl+r来重载)。
请求头

  1. 为了减少运行scrapy产生的大量无用输出,可以在settings.py的文件中加入。
LOG_LEVEL = 'WARNING'

将日志输出级别设为warning。

  1. 编写启动脚本,这样就不用每次运行时在命令行中输入scrapy crawl +spidername了。在项目文件夹下新建一个python文件。
from scrapy import cmdline   #导入cmdline

cmdline.execute('scrapy crawl newsspider -o 1.json'.split())  # 注意要split将字符串切一下。命令的意思为运行newsspider爬虫并用json文件来保存数据。

4.明确目标,此次抓取的目标是百度新闻导航栏,各个项目下的焦点(新闻标题+新闻链接)。
爬取内容
编写爬虫:由于爬取的是导航栏的各个选项,因此要一个选项一个选项的爬取。首先进入国内页面,将国内页面的焦点新闻抓取,抓取完成后访问国际页面,抓取焦点新闻,如此往复知道完成所有页面的爬取。

import scrapy
from scrapy import Request


class NewsspiderSpider(scrapy.Spider):
    name = 'newsspider'  # 爬虫名字
    allowed_domains = ['news.baidu.com']  # 允许爬取的范围
    start_urls = ['http://news.baidu.com']  # 起始网址
    
    
    def parse(self, response, **kwargs):
        types = ['guonei', 'guoji', 'mil', 'finance', 'ent', 'sports',
                 'internet', 'tech', 'game', 'lady', 'auto','house']  # 导航栏各个选项卡的标题
        if response.url[22:] not in types:  # 判断是否是导航栏网址
            for ty in types:  # 遍历导航栏
                yield Request('http://news.baidu.com/'+ty)  # 将获取的某一导航栏的响应抛出,链接通过字符串连接的到

        else:
            pages = response.xpath("//div[@class='l-left-col']//div[@class='b-left']/ul/li")  # xpath获取焦点新闻部分
            for page in pages:
                urls = page.xpath("./a/@href").extract()  # 提取焦点新闻的各个链接
                title = page.xpath("./a/text()").extract()  # 获取新闻标题
                yield {  # 将数据抛出 
                    'urls': urls,
                    'title': title
                }

5.设置输出格式。
进入settings.py文件,设置输出的编码,如果不该的话编码为Unicode码,汉字会乱码。

FEED_EXPORT_ENCODING = 'utf-8'

6.爬取得到的部分数据。

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单Scrapy爬虫项目实战,希望能帮助你入门Scrapy: 1. 分析目标网站 首先需要对目标网站进行分析,了解需要爬取的数据所在的页面、元素以及网站的反爬机制等。 以爬取豆瓣电影Top250为例,我们可以在浏览器中打开目标网站,查看其网页源代码,找到需要爬取的数据所在的元素,比如电影名称、导演、演员、评分等。 2. 创建Scrapy项目 打开命令行窗口,进入要创建项目的目录,输入以下命令: ``` scrapy startproject project_name ``` 其中,`project_name`为你所创建的项目名称。 3. 创建Spider 在Scrapy中,Spider是爬取网站的核心组件。我们需要创建一个Spider来定义如何爬取目标网站的数据。 在Scrapy项目的根目录下,进入`/spiders`文件夹,创建一个新的Python文件,例如`douban_spider.py`。在该文件中,定义一个Spider类,继承自`scrapy.Spider`,并重写`start_requests()`和`parse()`方法。 `start_requests()`方法用于生成初始请求,`parse()`方法用于处理响应并提取数据。 ```python import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def start_requests(self): for url in self.start_urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): # 处理响应并提取数据 pass ``` 4. 提取数据 在`parse()`方法中,我们可以使用XPath或CSS选择器来提取数据。以提取电影名称为例,我们可以使用XPath表达式`//div[@class="hd"]/a/span[1]/text()`或CSS选择器`div.hd a span:nth-child(1)::text`。 ```python import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def start_requests(self): for url in self.start_urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): # 提取电影名称 for item in response.xpath('//div[@class="hd"]/a/span[1]/text()'): name = item.extract().strip() yield {'name': name} ``` 5. 存储数据 最后,我们需要将提取到的数据存储到数据库或文件中。可以在`settings.py`文件中配置存储方式。 以下是将数据保存到JSON文件中的示例代码: ```python import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def start_requests(self): for url in self.start_urls: yield scrapy.Request(url=url, callback=self.parse) def parse(self, response): # 提取电影名称 for item in response.xpath('//div[@class="hd"]/a/span[1]/text()'): name = item.extract().strip() yield {'name': name} # 保存数据到JSON文件 filename = 'douban.json' with open(filename, 'w', encoding='utf-8') as f: f.write(json.dumps(data, ensure_ascii=False)) ``` 以上就是一个简单Scrapy爬虫项目实战,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值