python(七)爬虫框架

python(七)爬虫框架

常见的爬虫框架

  1. Scrapy框架:Scrapy框架是一套比较成熟的Python爬虫框架,是使用Python开发快速,高层次的信息爬取框架,可以高效的爬取web页面并提取出结构化的数据
  2. PySpider框架:PySpider是以Python脚本为驱动的抓取环模型爬虫框架
  3. Crawley框架:Crawley也是python开发的框架,该框架致力于改变人们从互联网中提取数据的方式
  4. Portia框架:Portia框架是一款允许没有任何变成基础的用户可视化地爬取网页的爬虫框架
  5. Newspaper:Newspaper框架是一款用来提取新闻、文章以及内容分析的Python爬虫框架

Scrapy框架的工作原理

  1. Scrapy Engin(引擎):Scrapy框架的核心部分。负责在Spider和Item Pipeline、Downloader、Scheduler中间通信、传递数据的
  2. Spider(爬虫):发送需要爬取的连接给引擎,最后引擎把其他模块请求回来的数据再发给爬虫,爬虫就去解析想要的数据
  3. Scheduler(调度器):负责接收引擎发送过来的请求,并按照一定的方式进行排列和整理,负责调度请求的顺序等。
  4. Downloader(下载器):负责接收引擎发送过来的请求,然后去网络上下载对应的数据再交给引擎。
  5. Item Pipeline(管道):负责将爬虫传递过来的数据进行保存
  6. Downloader Middlewares(下载中间件):可以扩展下载器和引擎之间通信功能的中间件
  7. Spider Middlewares(爬虫中间件):可以扩展引擎和爬虫之间通信功能的中间件

scrapy项目

创建项目:语法:scrapy startproject 项目名称 (通过命令创建)

scrapy框架的使用

爬取豆瓣top250图书

项目结构:
项目结构

  1. 修改配置文件settings
BOT_NAME = 'douban'

SPIDER_MODULES = ['douban.spiders']
NEWSPIDER_MODULE = 'douban.spiders'
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; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
}

ITEM_PIPELINES = {
   
   'douban.pipelines.DoubanPipeline': 300,
}
  1. 编写items文件
import scrapy
class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    publish = scrapy.Field()
    score = scrapy.Field()
  1. 编写爬虫文件 top250book
import scrapy
from bs4 import BeautifulSoup
from ..items import DoubanItem
class DoubanSpider(scrapy.Spider):
    name = 'douban' #定义爬虫的名称,启动程序时使用
    addowed_domains=['book.douban.com/top250'] # 定义允许爬虫爬取的域名
    start_urls = ['https://book.douban.com/top250'] # 定义的起始的网址,告诉爬虫应该从哪个网址开始爬取
    # parse是scrapy里默认的处理response(响应)的一个方法
    def parse(self, response, **kwargs):
        bs = BeautifulSoup(response.text,'html.parser')
        tr_tags = bs.find_all('tr',class_='item')
        for tr in tr_tags:
            item = DoubanItem() # 这个类的对象
            title = tr.find_all('a')[1]['title'] # 提取书的名称
            publish = tr.find('p',class_='pl').text # 提取出版信息
            score = tr.find('span',class_='rating_nums').text # 提取评分信息
            item['title'] = title
            item['publish'] = publish
            item['score'] = score
            # print([title,publish,score])
            # 数据封装完毕后,需要提交给引擎
            yield item
  1. 编写pipelines文件
from itemadapter import ItemAdapter

import openpyxl
class DoubanPipeline:
    def __init__(self):
        self.wb = openpyxl.Workbook()
        self.ws = self.wb.active
        # 添加表头
        self.ws.append(['名称','出版信息','评分'])

    def process_item(self, item, spider):
        # 数据存储操作
        line = [item['title'],item['publish'],item['score']]
        self.ws.append(line) # 将列表中的数据存储到工作表中
        return item
    # 定义一个关闭的方法
    def close_spider(self,spider):
        self.wb.save('book.xlsx')
        self.wb.close()
  1. 编写并运行start文件
from scrapy import cmdline
# cmdline.execute('scrapy crawl douban'.split(' '))
# print('scrapy crawl douban'.split(' '))
cmdline.execute(['scrapy', 'crawl', 'douban'])
  1. 运行完之后数据会保存到book.xlsx中。如图:
    书籍信息

爬取笔趣阁小说

  1. 分析URL:提取每页中章节小说的URL
  2. 创建项目
  3. 修改配置文件settings.py

BOT_NAME = 'story'

SPIDER_MODULES = ['story.spiders']
NEWSPIDER_MODULE = 'story.spiders'

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'

DOWNLOAD_DELAY = 1 #下载延迟
DEFAULT_REQUEST_HEADERS = {
   
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'Cookie': 'fontFamily=null; fontColor=null; fontSize=null; bg=null; UM_distinctid=175b634de922cf-0b54db46c3c024-3e604000-144000-175b634de9343e; Hm_lvt_0684ece53fc1331e366f282d44f9c519=1605079720; ASP.NET_SessionId=j4uj1auhycpqkfe1da5tmfta; bookid=9118; CNZZDATA1278951146=472983357-1605078139-%7C1605083129; booklist=%257B%2522BookId%2522%253A9118%252C%2522ChapterId%2522%253A3329140%252C%2522ChapterName%2522%253A%2522%25u65B0%25u4E66%25u53D1%25u5E03%2522%257D; fikker-KqHJ-Hc8Q=jJJW0OhJR3jSHeBJ0JTUBqnMOKIJDiKW; fikker-KqHJ-Hc8Q=jJJW0OhJR3jSHeBJ0JTUBqnMOKIJDiKW; Hm_lpvt_0684ece53fc1331e366f282d44f9c519=1605087647'
}

ITEM_PIPELINES = {
   
   'story.pipelines.StoryPipeline': 300,
}
  1. 编写爬虫文件 qustory
import scrapy
class QustorySpider(scrapy.Spider):
    name = 'qustory'
    allowed_domains = ['qu.la']
    # start_urls = ['https://www.qu.la/book/9118/3324988.html']
    start_urls = ['https://www.qu.la/book/911
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值