33、豆瓣图书短评

练习介绍

要求:

本练习需要运用scrapy的知识,爬取豆瓣图书TOP250(https://book.douban.com/top250  )前2页的书籍(50本)的短评数据存储成Excel

书名

评论ID

短评内容

1、创建爬虫项目

1 D:\USERDATA\python>scrapy startproject duanping
2 New Scrapy project ‘duanping‘, using template directory ‘c:\users\www1707\appdata\local\programs\python\python37\lib\site-packages\scrapy\templates\project‘, created in:
3     D:\USERDATA\python\duanping
4
5 You can start your first spider with:
6     cd duanping
7     scrapy genspider example example.com
8
9 D:\USERDATA\python>

2、创建爬虫文件 D:\USERDATA\python\duanping\duanping\spiders\duanping.py

 1 import scrapy
 2 import bs4
 3 import re
 4 import requests
 5 import math
 6 from ..items import DuanpingItem
 7
 8 class DuanpingItemSpider(scrapy.Spider):
 9     name = ‘duanping‘
10     allowed_domains = [‘book.douban.com‘]
11     start_urls = [‘https://book.douban.com/top250?start=0‘,‘https://book.douban.com/top250?start=0‘]
12
13     def parse(self,response):
14         bs = bs4.BeautifulSoup(response.text,‘html.parser‘)
15         datas = bs.find_all(‘a‘,class_=‘nbg‘)
16         for data in datas:
17             book_url = data[‘href‘]
18             yield scrapy.Request(book_url,callback=self.parse_book)
19
20     def parse_book(self,response):
21         book_url = str(response).split(‘ ‘)[1].replace(‘>‘,‘‘)
22         print(book_url)
23         bs = bs4.BeautifulSoup(response.text,‘html.parser‘)
24         comments = int(bs.find(‘a‘,href=re.compile(‘^https://book.douban.com/subject/.*/comments/‘)).text.split(‘ ‘)[1])
25         pages = math.ceil(comments / 20) + 1
26         #for i in range(1,pages):
27         for i in range(1,3):
28             comments_url = ‘{}comments/hot?p={}‘.format(book_url,i)
29             print(comments_url)
30             yield scrapy.Request(comments_url,callback=self.parse_comment)
31
32     def parse_comment(self,response):
33         bs = bs4.BeautifulSoup(response.text,‘html.parser‘)
34         book_name = bs.find(‘a‘,href=re.compile(‘^https://book.douban.com/subject/‘)).text
35         datas = bs.find_all(‘li‘,class_=‘comment-item‘)
36         for data in datas:
37             item = DuanpingItem()
38             item[‘book_name‘] = book_name
39             item[‘user_id‘]= data.find_all(‘a‘,href=re.compile(‘^https://www.douban.com/people/‘))[1].text
40             item[‘comment‘] = data.find(‘span‘,class_=‘short‘).text
41             yield item

3、编辑item文件 D:\USERDATA\python\duanping\duanping\items.py

1 import scrapy
2
3 class DuanpingItem(scrapy.Item):
4     book_name = scrapy.Field()
5     user_id = scrapy.Field()
6     comment  = scrapy.Field()

4、编辑文件 D:\USERDATA\python\duanping\duanping\pipelines.py

 1 import openpyxl
 2
 3 class DuanpingPipeline(object):
 4     def __init__(self):
 5         self.wb = openpyxl.Workbook()
 6         self.ws = self.wb.active
 7         self.ws.append([‘书名‘,‘评论ID‘,‘评论内容‘])
 8
 9     def process_item(self, item, spider):
10         line = [item[‘book_name‘],item[‘user_id‘],item[‘comment‘]]
11         self.ws.append(line)
12         return item
13     def close_spider(self,spider):
14         self.wb.save(‘./save.xlsx‘)
15         self.wb.close()

5、编辑D:\USERDATA\python\duanping\duanping\settings.py

 1 BOT_NAME = ‘duanping‘
 2
 3 SPIDER_MODULES = [‘duanping.spiders‘]
 4 NEWSPIDER_MODULE = ‘duanping.spiders‘
 5
 6 USER_AGENT = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36‘
 7
 8 ROBOTSTXT_OBEY = False
 9
10 DOWNLOAD_DELAY = 1
11
12 ITEM_PIPELINES = {
13     ‘duanping.pipelines.DuanpingPipeline‘: 300,
14 }
15
16 FEED_URI = ‘./save.csv‘
17 FEED_FORMAT=‘CSV‘
18 FEED_EXPORT_ENCODING=‘utf-8-sig‘

6、执行命令  scrapy crawl duanping



以下是草稿部分

1、图书列表页

https://book.douban.com/top250?start=0

https://book.douban.com/top250?start=1

<a class="nbg" href="https://book.douban.com/subject/1083428/"

2、图书详情页

https://book.douban.com/subject/1770782/

评论总数          <a href="https://book.douban.com/subject/1770782/comments/">全部 112943 条</a>

3、图书短评页

https://book.douban.com/subject/1770782/comments/hot?p=1      每页20个

书名                <a href="https://book.douban.com/subject/1770782/">追风筝的人</a>

find_all    <li class="comment-item" data-cid="693413905">

评论ID[1]       <a title="九尾黑猫" href="https://www.douban.com/people/LadyInSatin/">

<a href="https://www.douban.com/people/LadyInSatin/">九尾黑猫</a>

短评内容         <span class="short">“为你,千千万万遍。”我想,小说描写了一种最为诚挚的情感,而且它让你相信有些东西依然存在。在这个没有人相信承诺的年代,让人再次看到承诺背后那些美丽复杂的情感。这是一本好看的书,它让你重新思考。</span>

 1     <li class="comment-item" data-cid="693413905">
 2             <div class="avatar">
 3                 <a title="福根儿" href="https://www.douban.com/people/fugen/">
 4                     <img src="https://img3.doubanio.com/icon/u3825598-141.jpg">
 5                 </a>
 6             </div>
 7         <div class="comment">
 8             <h3>
 9                 <span class="comment-vote">
10                     <span id="c-693413905" class="vote-count">4756</span>
11                         <a href="javascript:;" id="btn-693413905" class="j a_show_login" data-cid="693413905">有用</a>
12                 </span>
13                 <span class="comment-info">
14                     <a href="https://www.douban.com/people/fugen/">福根儿</a>
15                         <span class="user-stars allstar50 rating" title="力荐"></span>
16                     <span>2013-09-18</span>
17                 </span>
18             </h3>
19             <p class="comment-content">
20
21                 <span class="short">为你,千千万万遍。</span>
22             </p>
23         </div>
24     </li>

原文地址:https://www.cnblogs.com/www1707/p/10850700.html

时间: 2024-10-31 02:09:01

33、豆瓣图书短评的相关文章

Python个人项目--豆瓣图书个性化推荐

项目名称: 豆瓣图书个性化推荐 需求简述:从给定的豆瓣用户名中,获取该用户所有豆瓣好友列表,从豆瓣好友中找出他们读过的且评分5星的图书,如果同一本书被不同的好友评5星,评分人数越多推荐度越高. 输入:豆瓣用户名 输出:豆瓣好友中评分最高,评分人数最多,且我没读过的10本书 步骤构想:1. 通过给定的用户名,将下面链接douban_id替换后可查看该用户关注的好友列表(访问该路径需要先登录)https://www.douban.com/people/douban_id/contacts 但如果是查

爬虫系列之豆瓣图书排行

豆瓣上有图书的排行榜,所以这次写了一个豆瓣的爬虫. 首先是分析排行榜的url 根据这个可以很容易的知道不同图书的排行榜就是在网站后面加上/tag/[类别],所以我们首先要获得图书的类别信息. 这里可以将读书首页的热门标签给爬下来.           爬取标签内容并不难,代码如下: 1 def getLabel(url): #获得热门标签 2 html = getHTMLText(url) 3 soup = BeautifulSoup(html, 'html.parser') 4 a = sou

Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(str(i) for i in range(0, 226, 25))] 2.模块 requests获取网页源代码 lxml 解析网页 xpath提取 3.提取信息 4.可以封装成函数 此处没有封装调用 python代码: #coding:utf-8 import sys reload(sys) sys.

八爪鱼采集教程——如何采集豆瓣图书评价

豆瓣图书评价如何采集 豆瓣是一个集品味系统(读书.电影.音乐).表达系统(我读.我看.我听)和交流系统(同城.小组.友邻)于一体的创新网络服务,致力于帮助都市人群发现生活中有用的事物.今天教大家怎么通过对豆瓣里面的图书评价信息采集,找一本适合自己的书. 方法/步骤 1.首先注册账号激活并登录 2.登陆后在八爪鱼采集软件界面左侧的菜单栏可以找到"采集规则"一项,小伙伴们可以先进入规则市场中搜索一下,自己想要采集的平台是否已经有现成的规则可借鉴.如果有,可以直接下载后导入新的任务即可使用,

豆瓣图书查询升级版“扫扫图书”

原文出自:方杰|http://fangjie.sinaapp.com/?p=88 转载请注明出处 github:https://github.com/JayFang1993/BookScaning 首先能够看看效果展示:http://fangjie.sinaapp.com/?page_id=54   MainActivity.java是主界面的Activity :BookView.java是显示图书基本信息的界面:CaptureActivity.java是扫描镜头界面:ReviewActivit

python爬虫——豆瓣图书top250信息

# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf-8') class Spider(object): def __init__(self): print('开始爬取豆瓣图书top250的内容......') # 传入url,返回网页源代码 def getSourceCode(self, url): html = requests.get(url)

豆瓣图书Top250

从豆瓣图书Top250抓取数据,并通过词云图展示 导入库 from lxml import etree #解析库 import time #时间 import random #随机函数 import pandas as pd import requests #请求库 import jieba #导入结巴分词 from pyecharts.charts import WordCloud from pyecharts import options as opts 抓取数据 #循环构造网址 def f

豆瓣图书接口API

所有数据均来源于豆瓣图书,数据量并不完整,仅供学习爬虫对照结果使用. 接口地址: http://api.xiaomafeixiang.com/api/bookinfo?isbn=9787544270878 把isbn替换为需要的数据即可,请合理使用. 已经入库数据量: 4月5日,102576 原文地址:https://www.cnblogs.com/mazhiyong/p/12626387.html

Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量

今天,花了一个晚上的时间边学边做,搞出了我的第一个爬虫.学习Python有两个月了,期间断断续续,但是始终放弃,今天搞了一个小项目,有种丰收的喜悦.废话不说了,直接附上我的全部代码. 1 # -*- coding:utf-8 -*- 2 __author__ = 'Young' 3 4 import re,urllib #urllib : 网页访问,返回网页的数据.内容 5 def my_get(ID):# 封装成函数方便调用 6 html = urllib.urlopen("https://r