本项目参考书上的例子自己找了一个小说网站(以笔趣阁为例)对各种热门书目信息爬取,用于练手,希望能够对和我一样的初学者有帮助。
友情链接
本文参考书目作者博客链接:https://cloud.tencent.com/developer/article/1151830
准备工作
1.pycharm;
2.scrapy框架;
创建项目
到这里我们的项目基本工作已经做好了。
观察网站
我们开始观察一下笔趣阁https://www.biqukan.cc各个页面和它的网页代码,以便爬取。
编写代码
观察完毕开始写代码,首先创建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 BiqugeItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
myclass = scrapy.Field() #小说的分类
topNum = scrapy.Field() #小说的排行
book_name = scrapy.Field() #小说名称
href = scrapy.Field() #小说链接
author = scrapy.Field() #小说作者
hots = scrapy.Field() #小说热度
然后我们开始解析Response,我这里采用css选择器提取自己想要的信息。
biqukan.py
# -*- coding: utf-8 -*-
import scrapy
from biquge.items import BiqugeItem
class BookSpider(scrapy.Spider):
name = 'biqukan'
allowed_domains = ['biqukan.cc']
start_urls = ['https://www.biqukan.cc/']
def parse(self, response):
t =response.css('.panel-heading')
myclass = t.css('::text').extract_first().strip(' ')[0:4]
magics = response.css('.list-group-item')
for magic in magics:
item = BiqugeItem()
item['myclass'] = myclass
item['topNum'] = magic.css('.topNum::text').extract_first()
item['book_name'] = magic.css('a::text').extract_first()
item['href'] = magic.css('a::attr(href)').extract_first()
item['author'] = magic.css('.text-muted::text').extract_first().strip('/ ')
item['hots'] = magic.css('.pull-right.text-muted::text').extract_first()
yield item
nexts = response.css('.nav.navbar-nav a')
for nexthref in nexts:
next = nexthref.css('::attr(href)').extract_first()
url = response.urljoin(next)
yield scrapy.Request(url=url, callback=self.parse)
(代码比较简单,这里就不一一注释了)
到这里基本上就结束了,如果你还想存到数据库里,详细内容请看上面的友情链接。
下面我们开始运行。
这里有两种方式,一种是在cmd窗口直接输入scrapy crawler biqukan
还有一种就是在spider中建立一个main.py文件用来运行,我这里选择建立文件。
(spider文件夹下book.py是我之前建立的spider名称,这里以biqukan.py为准,所以,请忽视那个独树一帜的名字吧_)
from scrapy import cmdline
cmdline.execute("scrapy crawl biqukan".split())
好了,我们开始运行吧!