使用scrapy爬蟲,爬取起點小說網的案例

爬取的頁面爲https://book.qidian.com/info/1010734492#Cataloghtml

爬取的小說爲凡人修仙之仙界篇,這邊小說很不錯。json

 

正文的章節以下圖所示dom

其中下面的章節爲加密部分,如今暫時沒法破解加密的部分。ε=(´ο`*)))唉..scrapy

下面直接上最核心的代碼(位於spiders中的核心代碼)ide

# -*- coding: utf-8 -*-
import scrapy

from qidian.items import QidianItem
import enum
class Qidian1Spider(scrapy.Spider):
    name = 'qidian1'
    allowed_domains = ['qidian.com']
    start_urls = ['https://book.qidian.com/info/1010734492#Catalog']
    def parse(self, response):
        #div[@class="volume"][1或者2或者3或者4]中的數值,這些數值自定義一個變量替代,目前一共是4個部分,隨着後續章節的增長,會出現第五部分或者第六部分 依次累加
        ###div[@class="volume"]["num"] ,num是自定義的變量,你能夠換成本身想要的abc或者bb等變量,把這些變量放進去,就能獲得全部章節的title??(不知道爲何)
        for aa in response.xpath(
                '//div[@class="volume-wrap"]/div[@class="volume"]["'
                '這裏填啥都行,不填就報錯,或者去掉class=volume後面的這個中括號就得不到a標籤中的標題,我也不知道什麼緣由!!!"]'
                '/ul[@class="cf"]/li'):

            title=aa.xpath("a/text()").extract()
            link=aa.xpath("a/@href").extract() 
for new_link in link: new_links="https:"+str(new_link) yield scrapy.Request(new_links, callback=self.parse_content) def parse_content(self,response): for bb in response.xpath('//div[@class="main-text-wrap"]'): title=bb.xpath('//div[@class="text-head"]/h3[@class="j_chapterName"]/text()').extract() content = bb.xpath('//div[@class="read-content j_readContent"]/p/text()').extract() kong_list=list(''.join(title)) item=QidianItem() item['title']=title
       item['content']=content yield item

 

在items.py中的核心代碼爲加密

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

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class QidianItem(scrapy.Item):

    title = scrapy.Field()
    link = scrapy.Field()
    content = scrapy.Field()

在pipelines.py中的核心代碼爲url

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

import json
class QidianPipeline(object):
    def process_item(self, item, spider):
        return item
    #初始化時指定要操做的文件
    def __init__(self):
        self.file = open('item.json', 'w', encoding='utf-8')
    # 存儲數據,將 Item 實例做爲 json 數據寫入到文件中
    def process_item(self, item, spider):

        lines = json.dumps(dict(item), ensure_ascii=False) + '\n'
        self.file.write(lines)
        return item
    # 處理結束後關閉 文件 IO 流
    def close_spider(self, spider):
        self.file.close()


咱們最後獲得的結果爲像這種的。spa

........3d

相關文章
相關標籤/搜索