Python实现爬虫抓取与读写、追加到excel文件操作示例


Posted in Python onJune 27, 2018

本文实例讲述了Python实现爬虫抓取与读写、追加到excel文件操作。分享给大家供大家参考,具体如下:

爬取糗事百科热门

安装 读写excel 依赖 pip install xlwt
安装 追加excel文件内容 依赖 pip install xlutils
安装 lxml

Python示例:

import csv
import requests
from lxml import etree
import time
import xlwt
import os
from xlutils.copy import copy
import xlrd
data_infos_list = []
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '
         '(KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}
# f = open('C:\\Users\\Administrator\\Desktop\\qiubaibook.csv', 'a+', newline='', encoding='utf-8')
# writer = csv.writer(f)
# writer.writerow(('author', 'sex', 'rank', 'content', 'great', 'comment', 'time'))
filename = 'C:\\Users\\Administrator\\Desktop\\qiubaibook.xls'
def get_info(url):
  res = requests.get(url, headers=headers)
  selector = etree.HTML(res.text)
  # print(res.text)
  htmls = selector.xpath('//div[contains(@class,"article block untagged mb15")]')
  # // *[ @ id = "qiushi_tag_120024357"] / a[1] / div / span 内容
  # //*[@id="qiushi_tag_120024357"]/div[2]/span[1]/i 好笑
  # //*[@id="c-120024357"]/i 评论
  # //*[@id="qiushi_tag_120024357"]/div[1]/a[2]/h2 作者
  # //*[@id="qiushi_tag_120024357"]/div[1]/div 等级
  # // womenIcon manIcon 性别
  for html in htmls:
    author = html.xpath('div[1]/a[2]/h2/text()')
    if len(author) == 0:
      author = html.xpath('div[1]/span[2]/h2/text()')
    rank = html.xpath('div[1]/div/text()')
    sex = html.xpath('div[1]/div/@class')
    if len(sex) == 0:
      sex = '未知'
    elif 'manIcon' in sex[0]:
      sex = '男'
    elif 'womenIcon' in sex[0]:
      sex = '女'
    if len(rank) == 0:
      rank = '-1'
    contents = html.xpath('a[1]/div/span/text()')
    great = html.xpath('div[2]/span[1]/i/text()') # //*[@id="qiushi_tag_112746244"]/div[3]/span[1]/i
    if len(great) == 0:
      great = html.xpath('div[3]/span[1]/i/text()')
    comment = html.xpath('div[2]/span[2]/a/i/text()') # //*[@id="c-112746244"]/i
    if len(comment) == 0:
      comment = html.xpath('div[3]/span[2]/a/i/text()')
    # classes = html.xpath('a[1]/@class')
    # writer.writerow((author[0].strip(), sex, rank[0].strip(), contents[0].strip(), great[0].strip(),
    #         comment[0].strip(), time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))))
    data_infos = [author[0].strip(), sex, rank[0].strip(), contents[0].strip(), great[0].strip(),
           comment[0].strip(), time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))]
    data_infos_list.append(data_infos)
def write_data(sheet, row):
  for data_infos in data_infos_list:
    j = 0
    for data in data_infos:
      sheet.write(row, j, data)
      j += 1
    row += 1
if __name__ == '__main__':
  urls = ['https://www.qiushibaike.com/8hr/page/{}/'.format(num) for num in range(1, 14)]
  for url in urls:
    print(url)
    get_info(url)
    time.sleep(2)
  # 如果文件存在,则追加。如果文件不存在,则新建
  if os.path.exists(filename):
    # 打开excel
    rb = xlrd.open_workbook(filename, formatting_info=True) # formatting_info=True 保留原有字体颜色等样式
    # 用 xlrd 提供的方法获得现在已有的行数
    rn = rb.sheets()[0].nrows
    # 复制excel
    wb = copy(rb)
    # 从复制的excel文件中得到第一个sheet
    sheet = wb.get_sheet(0)
    # 向sheet中写入文件
    write_data(sheet, rn)
    # 删除原先的文件
    os.remove(filename)
    # 保存
    wb.save(filename)
  else:
    header = ['author', 'sex', 'rank', 'content', 'great', 'comment', 'time']
    book = xlwt.Workbook(encoding='utf-8')
    sheet = book.add_sheet('糗百')
    # 向 excel 中写入表头
    for h in range(len(header)):
      sheet.write(0, h, header[h])
    # 向sheet中写入内容
    write_data(sheet, 1)
    book.save(filename)

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
跟老齐学Python之集合(set)
Sep 24 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
详解 Python 读写XML文件的实例
Aug 02 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
tensorflow求导和梯度计算实例
Jan 23 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python实现求纯色彩图像的边框
Apr 08 Python
python单元测试之pytest的使用
Jun 07 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 #Python
python3解析库lxml的安装与基本使用
Jun 27 #Python
详解Python安装scrapy的正确姿势
Jun 26 #Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 #Python
Python 修改列表中的元素方法
Jun 26 #Python
Python 找到列表中满足某些条件的元素方法
Jun 26 #Python
python3解析库pyquery的深入讲解
Jun 26 #Python
You might like
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
python实现二叉树的遍历
2017/12/11 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
动物学专业毕业生求职信
2013/10/11 职场文书
服务员自我评价
2014/01/25 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2014年电工工作总结
2014/11/20 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
二审答辩状范文
2015/05/22 职场文书
python绘制箱型图
2021/04/27 Python
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL