爬虫中的大哥大-scrapy框架介绍

爬虫中的大哥大-scrapy框架介绍,第1张

🉑文章适合于所有的相关人士进行学习🉑
👍各位看官看完了之后不要立刻转身呀👍
🏺期待三连关注小小博主加收藏🏺
⚓️小小博主回关快 会给你意想不到的惊喜呀⚓️

文章目录
    • 🥇scrapy介绍及安装
        • 🅰️创建项目
        • 🅱️ 创建爬虫
          • ✈️ 注意
          • 🐜 如何运行
    • 🥈scrapy爬虫实战
        • 🔢1.settings相关设置
        • 🔢2.starts相关设置
        • 🔢3.进入爬虫获取信息
        • 🔢4.items
    • 🥉scrapy运行结果


🥇scrapy介绍及安装

介绍一下scrapy在爬虫中到底有多重要!!

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

安装呢?我们简单一点

直接使用 pip install scrapy
这里就是整个的使用scrapy进行爬虫作业的流程图。

🅰️创建项目

要使用Scrapy框架创建项目,需要通过命令来创建。首先进入到你想把这个项目存放的目录。然后使用以下命令创建:

scrapy startproject [项目名称]

那么我们怎么进入项目呢,这就需要运行后台了,cmd下进行 *** 作逐步找到项目文件的地方然后在输入命令,完成项目的创建。

🅱️ 创建爬虫

scrapy genspider [爬虫名称] [爬虫作用的域名]
爬虫的目录介绍:
items.py:用来存放爬虫爬取下来数据的模型。
middlewares.py:用来存放各种中间件的文件。
pipelines.py:用来将items的模型存储到本地磁盘中。
settings.py:本爬虫的一些配置信息(比如请求头、多久发送一次请求、ip代理池等)。
scrapy.cfg:项目的配置文件。
spiders包:以后所有的爬虫,都是存放到这个里面。

✈️ 注意

在做一个爬虫之前,一定要记得修改setttings.py中的设置。两个地方是强烈建议设置的。
1.ROBOTSTXT_OBEY设置为False。默认是True。即遵守机器协议,那么在爬虫的时候,scrapy首先去找robots.txt文件,如果没有找到。则直接停止爬取。
2.DEFAULT_REQUEST_HEADERS添加User-Agent。这个也是告诉服务器,我这个请求是一个正常的请求,不是一个爬虫。
也就是说我们在正式爬虫之前要把这两个提前设置好。

🐜 如何运行

这里需要在最最最上方的目录中创建一个python项目,然后命名为start,写上下方程序,可以直接运行。

from scrapy import cmdline
cmdline.execute("scrapy crawl qsbk".split())
🥈scrapy爬虫实战 🔢1.settings相关设置

我们首先要在settings的demo中设置如下几个,首先把机器人协议关掉,然后我们在DEFAULT_REQUEST_HEADERS添加headers,还有就是我们打开爬虫管道。

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/100.0.4896.60 Safari/537.36'
}

```python
ITEM_PIPELINES = {
   'gsww.pipelines.GswwPipeline': 300,
}
🔢2.starts相关设置

这里是设置程序运行demo,要不然每次都需要在cmd后台运行很麻烦。

from scrapy import cmdline

cmds=['scrapy','crawl','gsww_spider']
cmdline.execute(cmds).split(" ")
🔢3.进入爬虫获取信息

import scrapy#导入scrapy框架
from scrapy.http.response.html import HtmlResponse
from scrapy.selector.unified import Selector
from ..items import GswwItem#从上一个文件items中导入GswwItem

class GswwSpiderSpider(scrapy.Spider):
    name = 'gsww_spider'
    allowed_domains = ['gushiwen.org','gushiwen.cn']
    start_urls = ['https://so.gushiwen.cn/shiwens/default.aspx?page=1&tstr=&astr=&cstr=&xstr=']#从哪一个页面开始
    def myprint(self,value):
        print('='*30)
        print(value)
        print('='*30)

    def parse(self, response):
        gsw_divs=response.xpath("//div[@id='leftZhankai']/div[@class='sons']")#如上图,我们找到所有的sons,也就是所有的古诗
        for gsw_div in gsw_divs:
            title = gsw_div.xpath(".//b/text()").get()#找到标题
            source = gsw_div.xpath(".//p[@class='source']/a/text()").getall()#z找到作者和朝代getall()
            try:
                author = source[0]
                dynasty = source[1]
                contents_list = gsw_div.xpath(".//div[@class='contson']//text()").getall()
                content = "".join(contents_list).strip()
                item = GswwItem(title=title, author=author, dynasty=dynasty, content=content)
                yield item  # 传给pipelines
            except:
                print(title)
        #换页 *** 作
        next_href=response.xpath("//a[@class='amore']/@href").get()
        if next_href:
            next_href=response.urljoin(next_href)
            request=scrapy.Request(next_href)
            yield request
🔢4.items
class GswwItem(scrapy.Item):
    title = scrapy.Field()
    author = scrapy.Field()
    dynasty= scrapy.Field()
    content = scrapy.Field()

最后我们在pipeline中将内容保存在文件当中。

class GswwPipeline:
    def open_spider(self,spider):
        self.fp=open("古诗文.txt","w",encoding="utf-8")

    def process_item(self, item, spider):
        self.fp.write(json.dumps(dict(item),ensure_ascii=False)+"\n")#把item的数据转化为json模式 json智能接受字典型数据
        #结束一个则换行 json.dumps是将一个Python数据类型列表进行json格式的编码解析
        # print("*"*30)
        # print(item)
        # print('*'*30)
        return item
    def close_spider(self,spider):
        self.fp.close()
🥉scrapy运行结果

🉑文章适合于所有的相关人士进行学习🉑
👍各位看官看完了之后不要立刻转身呀👍
🏺期待三连关注小小博主加收藏🏺
⚓️小小博主回关快 会给你意想不到的惊喜呀⚓️

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920748.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存