#  -*- coding = utf-8 -*-
#导入所需库
from bs4 import BeautifulSoup
import re
import xlwt
import urllib.request, urllib.error
import sqlite3

爬取步骤
#第一步 爬取数据
#第二步 解析数据
#第三步 保存数据

def main():baseurl = "https://book.douban.com/top250?start="datalist = getData(baseurl)savepath = "C:\\Users\\J\\Desktop\\读书2.xls"#保存路径# askURL("https://book.douban.com/top250?start=")saveData(datalist, savepath)#使用正则表达式进行内容提取
#规则设定
findLink = re.compile(r'<a href="(.*?)"')#书详情链接
findImgSrc = re.compile(r'<img src="(.*?)"',re.S)#书图片
findTitle = re.compile(r'title="(.*?)"',re.S)#书题
findFT = re.compile(r'<span style="font-size:12px;">(.*?)</span>')#外文名
findInq = re.compile(r'<p class="pl">(.*?)</p>',re.S)#相关信息
findScore = re.compile(r'span class="rating_nums">(.*?)</span>')#得分
findCount = re.compile(r'<span class="pl">(.*?)</span>', re.S)#评价人数
findIntro = re.compile(r'<span class="inq">(.*)</span>',re.S)#简介
def getData(baseurl):datalist = []for i in range(0,10):url = baseurl + str(i *25)html = askURL(url)#将得到的数据进行逐一解析soup = BeautifulSoup(html, "html.parser")for item in soup.find_all("tr", class_ = "item"):# print(item)data = []item = str(item)link = re.findall(findLink, item)[0]data.append(link)img = re.findall(findImgSrc, item)[0]data.append(img)title = re.findall(findTitle, item)[0]data.append(title)Ftitle = re.findall(findFT,item)if (len(Ftitle)==0):data.append(' ')else:data.append(Ftitle[0])Inq = re.findall(findInq, item)[0]Inq = Inq.replace("[","")Inq = Inq.replace("]","")data.append(Inq)score = re.findall(findScore, item)[0]data.append(score)count = re.findall(findCount, item)[0]count = re.sub('((\s+)?)(\s+)?',"",count)count = count.replace("(","")count = count.replace("人评价)","")data.append(count)introduction = re.findall(findIntro, item)if len(introduction) != 0 :introduction = introduction[0]data.append(introduction)else:data.append("暂无介绍")datalist.append(data)return datalist
def askURL(url):head ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"#模拟浏览器访问网页}request =  urllib.request.Request(url,headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")except urllib.error.URLError as e:if hasattr(e,"code"):print(e.code)if hasattr(e,"reason"):print(e.reason)return html
#保存xls数据
def saveData(datalist, savepath):print("Save....")book = xlwt.Workbook(encoding="utf-8", style_compression=0)sheet = book.add_sheet('豆瓣读书Top250', cell_overwrite_ok=True)col = ("书链接", "图片链接", "书名", "副标题", "相关信息", "豆瓣评分", "评价人数", "简介")for i in range(0,8):sheet.write(0, i, col[i])for i in range(0,250):print("第%d条"%(i+1))data = datalist[i]for j in range(0,8):sheet.write(i+1, j, data[j])book.save(savepath)
if __name__ == '__main__':main()print("完成")


Python爬取豆瓣读书Top250(正则表达式)相关推荐

  1. python爬取豆瓣读书top250并保存xls(含源码)

    python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...

  2. python爬取豆瓣读书top250

    python爬取豆瓣读书top250,并保存在本地. 分别用requests+re.requests+xpath 完成 1.requests + re import requests import r ...

  3. python爬虫爬取豆瓣读书Top250

    python爬虫爬取豆瓣读书Top250 话不多说,直接上代码! from urllib.request import urlopen, Request from bs4 import Beautif ...

  4. 使用python的scrapy框架简单的爬取豆瓣读书top250

    使用python的scrapy框架简单的爬取豆瓣读书top250 一.配置scrapy环境 1. 配置相应模块 如果没有配置过scrapy环境的一般需要安装lxml.PyOpenssl.Twisted ...

  5. 源码大公开!Python爬取豆瓣电影Top250源代码,赶紧收藏!

    哈喽~大家好,我是恰恰.不知道是不是有很多小伙伴跟我一样,很喜欢看电影,尤其是那种别人推荐的豆瓣高分电影,所以学Python就有一个好处,用Python爬取豆瓣电影那是分分钟的事,再也不用因为有些电影 ...

  6. 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分

    安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...

  7. 爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中

    爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中 获取源代码请访问https://github.com/zhang020801/douban_bookTop250 一.程序源代码 ...

  8. python爬取豆瓣读书的书名与简介

    最近写了一个python爬取豆瓣读书的书名与简介的程序,一开始是要爬取当当书名与简介的,由于涉及动态的一些问题,运用了selenium库,也实现了但是爬取速度慢,而且不稳定,出现被目标计算机积极拒绝访 ...

  9. 一看就会的20行代码爬取豆瓣读书Top250

    想入门Python爬虫,大家都喜欢拿爬取豆瓣读书Top250为例子来练手. 下面我就给大家分享一个简单的爬虫. 1.确定所需库 首先我们要确定需要引入的库. 要爬取网页的数据,当然要发送请求啦,所以我 ...

最新文章

  1. Exchange Server 2013之邮件存档配置
  2. linux网络_防火墙-iptables基础
  3. Mongo服务器二进制文件修复,Mongodb-File-Server
  4. 5行代码AC——L1-029 是不是太胖了 (5分)
  5. C# 解析 Targa文件 (TGA) 图形
  6. SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号
  7. oracle ocm 考题,2012年10 月oracle 10g ocm 认证 考试 真题 题库
  8. 阻抗分析仪(LCR表)与矢量网络分析仪
  9. 有道无术,术可求;有术无道,止于术-----《程序员面试笔试宝典》
  10. 压摆率//电源抑制比//共模抑制比//直流增益、带宽和相位裕度//静态功耗和直流工作点
  11. java string 返回方法_Java语言中,String类的IndexOf()方法返回的类型是()_学小易找答案...
  12. 大数据可视化技术:可视化技术概述与Echarts入门
  13. 进行淘宝商品比价的定向爬虫
  14. 《SQL 入门教程》示例数据库
  15. The Untended Antiquity (二维树状数组 哈希)
  16. oracle wallet相关的bug|oracle wallet使用注意事项|ORA-28374: typed master key not found in wa
  17. Canvas百战成神-圆(1)
  18. 推荐系统 | 威尔逊区间法
  19. 专题·关基保护 | 国家关键信息基础设施安全保护的法治进展
  20. FCKeditor 介绍

热门文章

  1. 域名证书和SSL证书一样的吗?有什么区别呢
  2. 计算机打印共享服务,Windows 7系统快速设置共享打印机
  3. 基于AD7705的超高精度电压采集电路板 4路电压采集端口,通过前端通过AD620运算放大器输出至AD5505通过STM32F030数据处理
  4. 意大利语合同翻译多少钱
  5. 距离-视觉-惯性里程计:无激励的尺度可观测性(ICRA2021)
  6. 【历史上的今天】9 月 12 日:世界上第一块集成电路诞生;QNX 操作系统开源;苹果推出 iPhone X
  7. 洛谷P1551亲戚题解
  8. 【用Python学习Caffe】7. 网络结构的修剪
  9. #9733;思维导图的30个问答
  10. [网络安全课程实验]:PGP加密解密