python scrapy简单介绍以及爬取小说阅读网实战并存入数据库(IP池,UA设置)

python scrapy简单介绍以及爬取小说阅读网实战并存入数据库(IP池,UA设置)

 

安装过程请自行百度pip安装scrapy。

 https://www.readnovel.com/free 小说阅读网网址

scrapy目录结构解析:如下图

 

items.py设置爬取数据的字段

middlewares.py 配置中间件 可以配置随机的user-agent伪装成游览器,配置代理ip池

pipelines.py 配置管道,做数据处理

settings.py 配置文件,在这个文件开启middlewares.py和pipelines.py,默认不开启

spiders 目录 存放爬虫文件

实战:

命令行执行scrapy startproject book 创建项目

cd 进目录执行 scrapy genspider getbookinfo  网址  生成爬虫文件

resource.py 存放USER_AGENTS和ip池 代码如下:

#使用随机代理Ip
PROXIES = [
   #存放Ip池
]

#USER_AGENTS
USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
]

setting.py 修改如下: 其中cookie和retry要自行添加, 其他开启注释修改即可。

ROBOTSTXT_OBEY = False  #改成false , 不遵守该网站的robots规则

COOKIES_ENABLED = True  #开启cookie

RETRY_ENABLED = False  #禁止重试,加快效率

DOWNLOADER_MIDDLEWARES = {  #开启中间件
    'book.middlewares.RandomProxy': 300,  #项目名.中间件.类名
   'book.middlewares.RandomUser': 543,
    'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 400,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': None,
   'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None
}

ITEM_PIPELINES = { #开启管道
   'book.pipelines.BookPipeline': 300,
}

middlewares.py设置:

# -*- coding: utf-8 -*-

from book.resource import PROXIES, USER_AGENTS  #引入Ip池和ua
import random


class RandomProxy(object):  #在settings.py中配置后会被自动执行
    def process_request(self, request, spider):  #用random设置随机的代理ip
        proxy = random.choice(PROXIES)
        print(proxy)
        request.meta['proxy'] = 'http://%s' % proxy


class RandomUser(object):   
    def process_request(self, request, spider):  #同理
        UA = random.choice(USER_AGENTS)
        request.headers.setdefault('User-Agent', random.choice(UA))

pipelines.py: 开启管道,并存入数据库,这里测试用的mongodb

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/") #连接mongo

class BookPipeline(object):

    def __init__(self):
        self.col = client['book']['bookinfo'] #选择book库中的Bookinfo表

    def process_item(self, item, spider):
        data = dict(item)  #将爬虫爬到数据转为字典
        self.col.insert(data) #插入数据
        return item

    def close_spider(self,spider):
        client.close()  #关闭爬虫

items.py:

字段数据

import scrapy

#书籍信息的字段
class BookItem(scrapy.Item):
    # define the fields for your item here like:

    #书籍名称
    book_name = scrapy.Field()

    #书籍类型
    book_type = scrapy.Field()

    #书籍状态  例如:已完结
    book_stat = scrapy.Field()

    #书籍作者
    book_author = scrapy.Field()

    #书籍字数
    book_fontNum = scrapy.Field()

 

getbookinfo.py爬虫:

重点在于xpath的编写。

该网页的翻页规则。

# -*- coding: utf-8 -*-
import scrapy
from book.items import BookItem

#爬取小说阅读网的免费玄幻小说(信息)
class GetbookinfoSpider(scrapy.Spider):
    name = 'getbookinfo'
    allowed_domains = ['www.readnovel.com'] #限制domain域
    pageNum = 1 #默认第一页
    #根据pageNum翻页的Url
    baseURL = 'https://www.readnovel.com/finish?pageSize=10&gender=1&catId=20001&isFinish=1&isVip=1&size=-1&updT=-1&orderBy=0&pageNum=' 
    start_urls = [baseURL + str(pageNum)]  

    def parse(self, response):
        try:

            node_list = response.xpath("//div[@class='book-info']")  #xpath获取dom节点

            for node in node_list:

                item = BookItem()  #把数据存入字段

                item['book_name'] = node.xpath("./h3/a/text()").extract()[0]

                item['book_type'] = node.xpath("./p[1]/span[1]/text()").extract()[0]

                item['book_stat'] = node.xpath("./p[1]/span[2]/text()").extract()[0]

                item['book_author'] = node.xpath("./p[1]/span[3]/text()").extract()[0]

                yield item  #生成迭代器,将数据传到管道做处理,然后进入下一个循环。

            if self.pageNum != 16:   #限制页数
                self.pageNum += 1   
                yield scrapy.Request(self.baseURL + str(self.pageNum), callback=self.parse) #进入下一页 然后callback执行parse函数
        except Exception as e:
            print(e)

main.py编写简单的启动脚本:

也可以直接命令行scrapy crawl getbookinfo

from scrapy import  cmdline


cmdline.execute(['scrapy','crawl','getbookinfo']) #getbookinfo是类名

 

github 项目地址 :  https://github.com/MRXKing/book

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Scrapy框架爬取我爱我家网站数据,并将数据存入数据库,可以按照以下步骤进行操作: 1. 首先,创建Scrapy项目。在命令行中执行以下命令来创建一个新的Scrapy项目: scrapy startproject woaiwojia 2. 进入项目的根目录,并创建一个名为spiders的文件夹,用于存放爬虫文件。运行以下命令: cd woaiwojia mkdir spiders 3. 在spiders文件夹中创建一个名为woaiwojia_spider.py的文件,用于编写爬虫代码。 4. 打开woaiwojia_spider.py文件,并导入所需库和模块: import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule import pymongo 5. 在woaiwojia_spider.py文件中,创建一个名为WoaiwojiaSpider的类,并继承CrawlSpider类: class WoaiwojiaSpider(CrawlSpider): name = 'woaiwojia' allowed_domains = ['woaiwojia.com'] start_urls = ['http://www.woaiwojia.com'] 6. 在WoaiwojiaSpider类中,定义rules列表,用于配置爬取规则: rules = ( Rule(LinkExtractor(allow=r'/\d+\.html'), callback='parse_item', follow=True), ) 7. 在WoaiwojiaSpider类中,定义parse_item方法,用于解析爬取到的数据,并存入数据库: def parse_item(self, response): # 解析数据逻辑,获取需要的数据 item = {} item['title'] = response.xpath('//title/text()').extract_first() item['content'] = response.xpath('//p/text()').extract_first() # 连接数据库并存储数据 client = pymongo.MongoClient('mongodb://localhost:27017/') db = client['woaiwojia'] collection = db['data'] collection.insert_one(item) return item 8. 在命令行中执行以下命令来启动爬虫: scrapy crawl woaiwojia 以上就是使用Scrapy框架爬取我爱我家网站数据并存入数据库的基本步骤,可以根据实际情况进行相应的修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值