简述
1. 使用scrapy,爬取douban图书top250信息:https://book.douban.com/top250 2. 将爬取到的信息写入到mysql数据中 3. 使用flask,将数据读取处理,用表格形式展示到页面上,包括:书名、评分、评价数、作者、出版社、出版时间、定价、该书douban链接 4. 使用Bootstrap,把页面整好看点
一、使用scrapy,爬取douban
第一步,创建项目
scrapy startproject douban
scrapy项目的文件结构
- scrapy.cfg:项目的配置文件
- items.py:项目中的 item 文件,保存爬取到的数据的容器
- pipelines.py:项目中的 pipelines 文件
- settings.py:项目的设置文件
- spiders/:放置 spider 代码的文件夹
第二步:定义 Item
import scrapy
class DoubanItem(scrapy.Item):
# 书名、评分、评价数、作者、出版社、出版时间、定价、该书douban链接
# 书名
bookname = scrapy.Field()
# 评分
common_grade = scrapy.Field()
# 评价数
common_num = scrapy.Field()
# 作者
author = scrapy.Field()
# 出版社
press = scrapy.Field()
# 出版时间
pub_date = scrapy.Field()
# 定价
price = scrapy.Field()
# douban链接
link = scrapy.Field()
pass
第三步:编写Spider代码
Spider 是用户编写用于从单个网站(或者一些网站)爬取数据的类。包含以下三个属性:
name:用于区别 spider,该名字必须是唯一的。
start_urls:包含了 spider 在启动时进行爬取的 URL 列表。因此,第一个被获取到的页面将是其中之一。后续的 URL 则从初始的 URL 获取到的数据中提取。
parse() 是 spider 的一个方法。被调用时,每个初始 URL 完成下载后生成的 response 对象将会作为唯一的参数传递给该函数。该方法负责解析返回的数据(response data),提取数据(生成 item)以及生成需要进一步处理的 URL 的 Request 对象。
Spider 代码,保存在 douban/spiders 目录下的 douban_spider.py 文件中
import scrapy
from typing import Any
from scrapy.http import Response
from test6_scrapy_douban.douban.douban.items import DoubanItem
class Douban_spider(scrapy.Spider):
'''
1. 使用scrapy,爬取douban图书top250信息:https://book.douban.com/top250
2. 将爬取到的信息写入到mysql数据中
3. 使用flask,将数据读取处理,用表格形式展示到页面上,包括:书名、评分、评价数、作者、出版社、出版时间、定价、该书douban链接
4. 使用Bootstrap,把页面整好看点
'''
# 爬虫名字
name = 'douban'
# 允许爬取的网站域名
allowed_domains = ['book.douban.com']
# 起始网址
start_urls = ['https://book.douban.com/top250']
def parse(self, response: Response, **kwargs: Any) -> Any:
global t
book_list = response.xpath("//div[@class='indent']//table")
for item in book_list:
book_item = DoubanItem()
book_item['bookname'] = item.xpath(".//tr[@class='item']//td[2]//div[@class='pl2']//a/@title").extract_first()
book_item['common_grade'] = item.xpath(".//tr[@cla