Scrapy爬虫入门

写一个爬虫,需要做很多的事情。比如:发送网络请求、数据解析、数据存储、反反爬虫机制(更换ip代理、设置请求头等)、 异步请求等。这些工作如果每次都要自己从零开始写的话,比较浪费时间。因此Scrapy 把一些基础的东西封装好了,在他上面写爬虫可以变的更加的高效(爬取效率和开发效率)。因此真正在公司里,一些上了量的爬虫,都是使用Scrapy框架来解决。

  1. 首先通过命令行来创建scrapy项目 输入如下语句创建
    scrapy startproject 项目名
    执行完毕后将在系统当前目录下创建一个scrapy项目

  2. 接着在命令行进入到项目所在目录创建爬虫输入如下语句
    scrapy genspider 爬虫名称 “请求域名” 即可创建爬虫(注意爬虫名称不能和项目名称相同)

  3. Scrapy Shell

我们想要在爬虫中使用xpath、beautifulsoup、 正则表达式、css选择器等来提取想要的数据。但是因为scrapy 是一个比较 重的框架。每次运行起来都要等待一段时间。因此要去验证我们写的提取规则是否正确,是个比较麻烦的事情。因此Scrapy 提供了一个shell,用来方便的测试规则。当然也不仅仅局限于这个功能。
打开Scrapy Shell:
打开cmd终端,进入到Scrapy 项目所在的目录,输入命令scrapy shell [链接]。就会进入到scrapy的shell环境中。在这个环境中,我们可以跟在爬虫的parse方法中一样使用了。
在shell中我们可以使用response.text获取到请求页面的html源码,在这里可以测试xpath语法,BeautifuSoup语法,或者正则表达式语法正确与否,不用在项目代码中去测试。更加方便独立。
譬如
scrapy shell “www.baidu.com”
response.xpath("//input[@id=‘su’]/@value").get()
soup.find(“input”,attrs={“id”:“su”})

  1. 接着在settings.py下设置机器人规则以及请求头信息
    ROBOTSTXT_OBEY = False
    DEFAULT_REQUEST_HEADERS = {
    ‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
    ‘Accept-Language’: ‘en’,
    ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36’
    }
  2. 在2中创建的spider.py下编码譬如下代码块
class QsbkSpiderSpider(scrapy.Spider):
    #爬虫名称
    name = 'qsbk_spider'
    #允许的域名
    allowed_domains = ['haha56.net']
    #起始请求的url,可以是多个
    start_urls = ['http://www.haha56.net/duanzi/201105/7940.html']

    def parse(self, response):
        contents = response.xpath("//div[@class='content']/pre")
        print("*" * 30)
        for content in contents:
            print(content.xpath(".//text()").get())
        print("*" * 30)
  1. 爬虫结果可以在cmd终端查看 在项目路径下打开cmd 键入
    scrapy crawl [2中创建的爬虫名称]即可返回运行结果
    亦或在ide中新建一个py文件导入cmdline模块在ide内模拟cmd终端运行命令如下代码块
from scrapy import cmdline

cmdline.execute("scrapy crawl qsbk_spider".split())

运行结果如下:
在这里插入图片描述

  1. 可以在pipelines.py下编码存储爬取下来的数据如下代码块 ,但是先要在spider.py中将处理好的数据yield给pipelines如下代码块
def parse(self, response):
        contents = response.xpath("//div[@class='content']/pre")

        for index, content in enumerate(contents):
            print("*" * 30)
            content = content.xpath("./text()").get().strip()
            content = re.sub(r"[\s+]", "", content)
            print(content)
            print("*" * 30)
            item = QsbkItem(index=index, content=content)
            yield item

在pipelines中保存数据的代码块如下,但是先要在settings.py中找到
#Configure item pipelines
#See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
‘qsbk.pipelines.QsbkPipeline’: 300,
}
将改代码段取消注释即可

import json

class QsbkPipeline(object):

    def __init__(self):
        self.fp = open("./spider_data/amused_words.json", "w", encoding="utf-8")

    def open_spider(self, spider):
        print("spider begin...")

    def process_item(self, item, spider):
        item_json = json.dumps(dict(item), ensure_ascii=False)
        self.fp.write(item_json + "\n")
        print("写入完成...")
        return item

    def close_spider(self, spider):
        self.fp.close()
        print("spider ending...")
  1. 最终写入结果如下图
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值