用XPath和xlwings爬取豆瓣读书Top250时遇到的问题及解决办法
一. XPath解析网页,提取数据
- 有些书会有副标题,如《人类简史:从动物到上帝》,冒号及后面的文字跟主标题不在同一个xpath,需要另外提取。而有些书名没有副标题,如果也用提取副标题的xpath就会出错,所以要用 try…except… 来处理。
name = p.xpath('./tr/td[2]/div[1]/a/text()')[0].strip() #书名name = name.replace('\n', '').replace(' ', '')try:add = p.xpath('./tr/td[2]/div[1]/a/span/text()')[0] #副标题name = name + addexcept:pass
二. xlwings存储数据
- 使用xlwings保存到xlsx文件中时,如果不想看见excel打开,可以在打开时设置visible= False.
app = xlwings.App(visible= False,add_book=False)
- 如果用
wb = xlwings.Book()
打开xlsx文件,最后不用quit()方法,只需wb.close()。
如果用app的话,最后要app.quit()。
app = xw.App(visible= False,add_book=False)
wb = app.books.add()
'''
wb.save('file.xlsx')
wb.close()
app.quit()
- xlwings的save()方法是覆写的(如果是已存在的文件)。
三.完整代码
import requests
from lxml import etree
import xlwings as xw
import time
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36','Host': 'book.douban.com'
}
books = [] #所有书及其信息都放进这个列表
for i in range (0,10):link = 'https://book.douban.com/top250?start=' +str(i*25) #每页的地址res = requests.get(link, headers=headers, timeout=20) #获取响应体print(str(i+1),'页响应状态码:',res.status_code) #通过状态码判断响应状态,200表示响应成功html = etree.HTML(res.text)paths = html.xpath('//*[@id="content"]/div/div[1]/div/table')for p in paths:name = p.xpath('./tr/td[2]/div[1]/a/text()')[0].strip() #书名name = name.replace('\n', '').replace(' ', '')try:add = p.xpath('./tr/td[2]/div[1]/a/span/text()')[0] #副标题name = name + addexcept:pass #如果没有副标题,就忽略弹出的异常info = p.xpath('./tr/td[2]/p[1]/text()')[0] #书籍信息rating = p.xpath('./tr/td[2]/div[2]/span[2]/text()')[0] #评分rating_people = p.xpath('./tr/td[2]/div[2]/span[3]/text()')[0].strip() #评分人数rating_people = rating_people.replace('(', '').replace(')', '').replace('\n', '').replace(' ', '').replace('人评价', '') #只留下数字quote = p.xpath('./tr/td[2]/p[2]/span/text()')[0] #评语book_link = p.xpath('./tr/td[2]/div[1]/a/@href')[0] #书籍链接books.append([name,info,rating,rating_people,quote,book_link]) #每本书都用放一个列表,再把所有书的列表放进一个列表,以便写入文件time.sleep(2) #避免频繁请求而被封IP,豆瓣的话不要也行print('Writing into file...')
app = xw.App(visible= False,add_book=False)
wb = app.books.add()
sht0 = wb.sheets[0]
sht0.range('A1').value = ['书名','作者/出版社/出版时间/定价','评分','评价人数','评语','网址'] #在第一行写入各个标题
sht0.range('A2').value = books #从第二行开始多行写入(books是二位列表)
wb.save('books_by_xpath.xlsx')
wb.close()
app.quit()
print('Finish!')
用XPath和xlwings爬取豆瓣读书Top250时遇到的问题及解决办法相关推荐
- 使用Xpath语法爬取豆瓣读书Top250
使用Xpath语法爬取豆瓣读书Top250(csv存取数据) 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: 建议大家从 ...
- 使用python的scrapy框架简单的爬取豆瓣读书top250
使用python的scrapy框架简单的爬取豆瓣读书top250 一.配置scrapy环境 1. 配置相应模块 如果没有配置过scrapy环境的一般需要安装lxml.PyOpenssl.Twisted ...
- python爬取豆瓣读书top250并保存xls(含源码)
python爬取豆瓣读书top250并保存xls(含源码) 又是霍霍豆瓣的一天O(∩_∩)O哈哈~. 目标网站:http://book.douban.com/top250/ 全军出击!!! 首先,按下 ...
- python爬取豆瓣读书top250
python爬取豆瓣读书top250,并保存在本地. 分别用requests+re.requests+xpath 完成 1.requests + re import requests import r ...
- 爬虫项目实操三、用scrapy框架爬取豆瓣读书Top250的书名,出版信息和评分
安装方法:Windows:在终端输入命令:pip install scrapy:mac:在终端输入命令:pip3 install scrapy,按下enter键,再输入cd Python,就能跳转到P ...
- python爬虫爬取豆瓣读书Top250
python爬虫爬取豆瓣读书Top250 话不多说,直接上代码! from urllib.request import urlopen, Request from bs4 import Beautif ...
- 爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中
爬取豆瓣读书Top250,导入sqlist数据库(或excel表格)中 获取源代码请访问https://github.com/zhang020801/douban_bookTop250 一.程序源代码 ...
- 一看就会的20行代码爬取豆瓣读书Top250
想入门Python爬虫,大家都喜欢拿爬取豆瓣读书Top250为例子来练手. 下面我就给大家分享一个简单的爬虫. 1.确定所需库 首先我们要确定需要引入的库. 要爬取网页的数据,当然要发送请求啦,所以我 ...
- [爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书
这里我们要爬起豆瓣读书Top250,并保存每本书的书名,信息,简要介绍和作者信息. 这里,仍然分为三步: 1.url分析 2.数据分析 3.爬取数据 1.url分析 豆瓣读书Top250的ur ...
最新文章
- 使用CSS3美化复选框checkbox
- 《Git的奇技淫巧》.PDF
- 《深度探索C++对象模型》--2 构造函数语意学
- 【Linux】 Kill 批量杀死进程
- 初学PX4之飞控算法
- linux应用之----进程控制理论
- GraphAPI 1.0中新增加的Teams API
- 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...
- 【深度学习框架】Tensorflow Session.run()函数的进一步理解
- docker hub mysql主从_使用 Docker Compose 搭建 MySQL 数据库主从复制实例
- Docker 核心技术 NameSpace, CGroup, AUFS, DeviceMapper
- ubuntu 挂载 windows 分区
- 桌面cpu与服务器cpu天梯,桌面CPU性能排行 桌面CPU天梯图2017年6月最新版
- 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
- 与孤独世界的博弈——诺贝尔奖得主约翰·纳什的传奇一生
- 第一节:(2)逻辑芯片工艺特性指标
- Android super.img 镜像解包
- Combination Sum II
- 有限差分法的MATLAB程序!!!!
- API_Application