豆瓣读书爬虫(requests + re)

  前面整理了一些爬虫的内容,今天写一个小小的栗子,内容不深,大佬请忽略。内容包括对豆瓣读书网站中的书籍的基本信息进行爬取,并整理,便于我们快速了解每本书的中心。

一、爬取信息

  每当爬取某个网页的信息时,首先就是要进入到网页中,看看有没有什么爬取过程中的限制,可以查看网站的robots协议。就是在原网址的后面加上"/robots.txt"。本网站中得到的结果是:

User-agent: *
Disallow: /subject_search
Disallow: /search
Disallow: /new_subject
Disallow: /service/iframe
Disallow: /j/
Sitemap: http://www.douban.com/sitemap_index.xml
Sitemap: http://www.douban.com/sitemap_updated_index.xml

User-agent: Wandoujia Spider
Disallow: /

  根据上面的协议可以看到,并没有禁止一些普通的爬虫,就像我们现在这样,仅仅爬取一点点的东西来供自己使用。那么,我们就可以使用之前文章中提到的结构来实现这个爬虫,首先导入函数库,然后套用框架,传入地址,返回页面内容。这点内容在这篇博客中写到了,这里就不详细解释了。到此,网页的爬取就结束了,接下来就剩下从这些东西中拿到我们想要的内容。

 1 import requests
 2
 3 url = "https://book.douban.com/"
 4 def getHtmlText(url):
 5     headers = {
 6         ‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36‘
 7     }
 8     try:
 9         response = requests.get(url, headers=headers)
10         response.raise_for_status()
11         response.encoding = response.apparent_encoding
12         return response.text
13     except:
14         print("Fail")
15         return
16
17 html = getHtmlText(url)

二、信息处理

  上面提取的的网页代码包括很多东西,像展示出来的页面的各种框架等等,这些对我们来说都是没有用的,而且通过正则来提取信息,如果在整个页面中直接提取的话,不免会出现一些巧合,使得没有提取到真正想要的内容,而且pattern一样的其他内容,所以,首先,把要把关键的块先拿出来,再一点一点的取出具体信息。

1 import re
2
3 re_books = re.compile(‘<ul class="list-col list-col5 list-express slide-item">(.*?)</ul>‘, re.S)  # re.S也在正则表达式的博客中写到了,是为了让“.”可以匹配换行符
4 content = re_books.search(html)

  通过检查网页源代码,找到可以取出主要信息的匹配规则,将中间的内容全部获得。剩下的就是通过正则来提取每本书的每项信息。这个在于自己观察他们的规律,寻找匹配的规则。信息的标签不止一个,最后选择了使用pandas来整理数据,pandas的DataFrame数据类型可以很方便的存储二维结构,而且pandas有将数据之间存储成excel格式的方法(DataFrame.to_excel())。

 1 import pandas as pd  # 这是大部分人的习惯,pandas比较长,而且在数据处理中经常使用,所以用pd两个字母来代表
 2
 3 # 首先,先创建一个DataFrame,之后遍历每本书籍的信息,存成DataFrame格式拼接在他的后面就可以了
 4 data = pd.DataFrame(columns=[‘title‘, ‘author‘, ‘abstract‘, ‘href‘, ‘publisher‘])
 5
 6 re_book = re.compile(‘<li class="">(.*?)</li>‘, re.S)
 7 bookList = re_book.findall(content[0])  # findall找到所有的书籍信息,返回为列表格式
 8 for book in bookList:
 9     count = 0
10     count += 1
11     href = re.search(‘href="(.*?)"‘, book)  # .*? 是指以非贪婪的模式匹配,()是分组,通过group方便取出其中的信息
12     href = href.group(1)
13     title = re.search(‘<h4 class="title">(.*?)</h4>‘, book, re.S)
14     title = title.group(1).split()[0]
15     author = re.search(‘<span class="author">(.*?)</span>‘, book, re.S)
16     author = ‘ ‘.join(author.group(1).split())
17     publisher = re.search(‘<span class="publisher">(.*?)</span>‘, book, re.S)
18     publisher = ‘ ‘.join(publisher.group(1).split())
19     abstract = re.search(‘<p class="abstract">(.*?)</p>‘, book, re.S)
20     abstract = ‘ ‘.join(abstract.group(1).split())
21     abstract = re.sub(‘【内容简介】‘, ‘‘, abstract)  # 慢慢调试中发现,取得的信息不太好看,其中在第一本数的主要内容开头有这么几个字,就用re的sub方法替换掉了
22     new = pd.DataFrame({"title":title, "author":author, "abstract":abstract, "href":href, "publisher":publisher}, index=["0"])
23     data = data.append(new, ignore_index=True)
24 data.to_excel(‘bookInfo.xls‘, encoding=‘utf-8‘)

  我们可以看一下得到的结果,pandas直接输出的结果也很规整,这里存储到了excel中,起初存到csv文件中,但是乱码了,后面没多想就换成了excel,稍后我再去看看怎么回事,或者有读者清楚地,可以教教博主。

  图中有些东西没有展示出来,但是大家都懂对吧。可以自己试一试。当然这个爬虫很浅,仅得到这点的数据,后面的内容就交给你们了,可以试着往深里点一点,原理都是大同小异的,学习爬虫在平时就要随时发现可以挖掘的东西,慢慢尝试。

原文地址:https://www.cnblogs.com/yudanqu/p/9863827.html

时间: 2024-10-08 12:34:15

豆瓣读书爬虫(requests + re)的相关文章

【Python爬虫】听说你又闹书荒了?豆瓣读书9.0分书籍陪你过五一

说明 五一将至,又到了学习的季节.目前流行的各大书单主打的都是豆瓣8.0评分书籍,却很少有人来聊聊这9.0评分的书籍长什么样子.刚好最近学了学python爬虫,那就拿豆瓣读书来练练手. 爬虫 本来思路是直接爬豆瓣的书籍目录,将评分9.0以上的书筛选出来,一打开发现事情并不简单,几千万本书可不好爬 = =,于是转化一下思路,看有没有类似的书单. 一搜还真有,找到一个9.0评分的榜单,大大减少了工作量,这样就不用先爬一下整站书籍来筛选了.看了看榜单,应该是某位好心的书友手工整理的,更新时间为2018

Python爬虫 爬取豆瓣读书

最近用Python写了个豆瓣读书的爬虫玩,方便搜罗各种美美书,分享给大家 实现功能: 1 可以爬下豆瓣读书标签下的所有图书 2 按评分排名依次存储 3 存储到Excel中,可方便大家筛选搜罗,比如筛选评价人数>1000的高分书籍:可依据不同的主题存储到Excel不同的Sheet 4 采用User Agent伪装为浏览器进行爬取,并加入随机延时来更好的模仿浏览器行为,避免爬虫被封 试着爬了七八万本书,存在了book_list.xlsx中,结果截图如下: 详细代码和爬取的一些结果可移步到GitHub

python豆瓣电影爬虫

python豆瓣电影爬虫 可以爬取豆瓣电影信息,能够将电影信息存进mysql数据库,还能够下载电影预告片.2.3. 4功能使用到selenium库 一个例程运行截图 下载好的电影预告片 MySQL存储的数据 数据表构造 这是程序流程图,详细写明了本爬虫的运行流程 爬虫程序代码 # Author:YFAN import random import requests import lxml.etree from time import sleep import re import pymysql f

用python+selenium抓取豆瓣读书中最受关注图书,按照评分排序

抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评论 #coding=utf-8 from selenium import webdriver from time import sleep class DoubanPopularBook:     def __init__(self):         self.dr = webdriver.Chrome()         self.

Java豆瓣电影爬虫——抓取电影详情和电影短评数据

一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. 动机 采集豆瓣电影数据包括电影详情页数据和电影的短评数据. 电影详情页如下图所示 需要保存这些详情字段如导演.编剧.演员等还有图中右下方的标签. 短评页面如下图所示 需要保存的字段有短评所属的电影名称,每条评论的详细信息如评论人名称.评论内容等. 数据库设计 有了如上的需求,需要设计表,其实很简单,

Python 爬虫—— requests BeautifulSoup

本文记录下用来爬虫主要使用的两个库.第一个是requests,用这个库能很方便的下载网页,不用标准库里面各种urllib:第二个BeautifulSoup用来解析网页,不然自己用正则的话很烦. requests使用,1直接使用库内提供的get.post等函数,在比简单的情况下使用,2利用session,session能保存cookiees信息,方便的自定义request header,可以进行登陆操作. BeautifulSoup使用,先将requests得到的html生成BeautifulSo

爬虫requests库的方法与参数

爬虫requests库的方法与参数 import requests """ # 1. 方法 requests.get requests.post requests.put requests.delete ... requests.request(method='POST') """ # 2. 参数 """ 2.1 url 2.2 headers 2.3 cookies 2.4 params 2.5 data,传请求体

解决python爬虫requests.exceptions.SSLError: HTTPSConnectionPool(host=&#39;XXX&#39;, port=443)问题

爬虫时报错如下: requests.exceptions.SSLError: HTTPSConnectionPool(host='某某某网站', port=443): Max retries exceeded with url: /login/ (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify fail

Web Spider实战1——简单的爬虫实战(爬取&quot;豆瓣读书评分9分以上榜单&quot;)

1.Web Spider简介 Web Spider,又称为网络爬虫,是一种自动抓取互联网网页信息的机器人.它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式.它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息. 2.一个简单的网络爬虫案例 作者在浏览网页的时候看到豆瓣书单的网页(首页),如下所示: 因为书单共有409本书,17个页面,若是要一个个浏览完,需要较长的时间,想要保存好书单,那