用 scrapy 写第一个爬虫

用 scrapy 写第一个爬虫

注:安装步骤跳过,仅供安装好软件参考使用

使用 scrapy 来创建第一个 HelloScrapy 项目

  1. 在 workSpace 中打开 cmd 输入 scrapy startproject HelloScrapy 得到如下图所示文件
    在这里插入图片描述
  2. 用 idea 等工具打开 HelloScrapy 文件,得到如下所示目录结构
    在这里插入图片描述
    注:进入项目时候需要先设置 SDK 不然出现如下情况
    在这里插入图片描述
    解决方法如下
    在这里插入图片描述

3.开始写爬虫文件,在 spiders 目录下新建 hello_spider.py 文件,具体代码看如下代码片段所示,这里我选用的是 css 选择器,对于我一个 java 后台人员来说, css 选择器更加容易理解和更好上手,至于 xpath ,哦 xpath.

# -*- coding: utf-8-*-
import scrapy
from HelloScrapy.items import HelloscrapyItem


class HelloSpider(scrapy.Spider):
    # spider的名字定义了Scrapy如何定位(并初始化)spider,必须是唯一的。 不过可以生成多个相同的spider实例(在 spiders 目录下写多个爬取文件)
    name = "helloScrapy"
    
    #我这里使用的启动命令,将爬取的数据写成一个 json 文件,scrapy crawl helloScrapy -o item.json
    
    # 这个属性是可选的.主要用于筛选符合的 url 这里就不使用
    # allowed_domains = ['http://www.iqianyue.com/']

    # URL列表。当没有制定特定的URL时,spider将从该列表中开始进行爬取。
    start_urls = [
        'http://www.iqianyue.com/'
    ]
    def parse(self, response):
        print("response -> ", response.text)
        read_list = response.css('div.pet_content_main > div > div > ul > li')
        for read in read_list:
            item = HelloscrapyItem()
            item["author"] = read.css(
                'div.pet_list_one_info > div.pet_list_one_info_l > div::text').extract_first().strip()
            item["type"] = read.css(
                'div.pet_list_one_info > div.pet_list_one_info_r > div::text').extract_first().strip()
            item["title"] = read.css(
                ' div.am-u-sm-8.am-list-main.pet_list_one_nr > h3 > a::text').extract_first().strip()
            #这里的 yield 我理解相当于 java 中的 return,如果这里不将 item 在下文我们启动项目时候是没有将数据写出的
            yield item
            

4.运行命令 scrapy crawl helloScrapy -o item.json 将数据写在根目录下一个 item.json 文件中,如下:
在这里插入图片描述
在这里插入图片描述

  • 这里数据已经爬取下来了,但是我们看到这些数据很显然是 unicode ,我们需要把它转换成中文
    在这里插入图片描述

5.设置全局编码

  • 打开 settings.py 文件,添加 FEED_EXPORT_ENCODING = ‘utf-8’ 将编码设置成 UTF-8 这时候解析的数据就变成中文了.
    在这里插入图片描述
  • 此时再看运行结果
    在这里插入图片描述
    此时一个简单的爬虫就写完成了,是不是迫不及待想上手试试呢?在本示列网站中,每次发送请求时候,返回内容不太一样,会造成自己爬在item.json 文件中的数据和直接浏览器访问不一致,每次浏览器请求的返回内容就不一致的,这个是网站的设定,当然这里没写翻页继续请求的,翻页请求的不过是将请求 url 拼接一下 currentPage 通过 for 循环继续请求,这里就不做任何演示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值