一. XPath解析网页,提取数据

  1. 有些书会有副标题,如《人类简史:从动物到上帝》,冒号及后面的文字跟主标题不在同一个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存储数据

  1. 使用xlwings保存到xlsx文件中时,如果不想看见excel打开,可以在打开时设置visible= False.
app = xlwings.App(visible= False,add_book=False)
  1. 如果用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()
  1. 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时遇到的问题及解决办法相关推荐

  1. 使用Xpath语法爬取豆瓣读书Top250

    使用Xpath语法爬取豆瓣读书Top250(csv存取数据) 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: 建议大家从 ...

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

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

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

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

  4. python爬取豆瓣读书top250

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

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

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

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

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

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

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

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

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

  9. [爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书

    这里我们要爬起豆瓣读书Top250,并保存每本书的书名,信息,简要介绍和作者信息.  这里,仍然分为三步:  1.url分析  2.数据分析  3.爬取数据 1.url分析 豆瓣读书Top250的ur ...

最新文章

  1. 使用CSS3美化复选框checkbox
  2. 《Git的奇技淫巧》.PDF
  3. 《深度探索C++对象模型》--2 构造函数语意学
  4. 【Linux】 Kill 批量杀死进程
  5. 初学PX4之飞控算法
  6. linux应用之----进程控制理论
  7. GraphAPI 1.0中新增加的Teams API
  8. 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...
  9. 【深度学习框架】Tensorflow Session.run()函数的进一步理解
  10. docker hub mysql主从_使用 Docker Compose 搭建 MySQL 数据库主从复制实例
  11. Docker 核心技术 NameSpace, CGroup, AUFS, DeviceMapper
  12. ubuntu 挂载 windows 分区
  13. 桌面cpu与服务器cpu天梯,桌面CPU性能排行 桌面CPU天梯图2017年6月最新版
  14. 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
  15. 与孤独世界的博弈——诺贝尔奖得主约翰·纳什的传奇一生
  16. 第一节:(2)逻辑芯片工艺特性指标
  17. Android super.img 镜像解包
  18. Combination Sum II
  19. 有限差分法的MATLAB程序!!!!
  20. API_Application

热门文章

  1. 珍藏级办公必备软件,点进来的都说很香
  2. Arnold映射(猫映射)原理及 matlab源码
  3. 什么是webpack模块化构建工具
  4. Fikkernbsp;反向代理服务器nbsp;…
  5. java计算两个经纬度之间的距离
  6. 【庆元宵|平安多喜乐】
  7. 记一次Execution failed for task ':app:processDebugResources'坑
  8. Mybatis源码介绍
  9. mac系统安装git 详细教程
  10. Nomogram(诺莫图) | Logistic、Cox生存分析结果可视化