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操作MySQL数据库的方法分享
May 29 Python
详解Python中的日志模块logging
Jun 19 Python
Python中线程编程之threading模块的使用详解
Jun 23 Python
python写日志封装类实例
Jun 28 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
python3.7 的新特性详解
Jul 25 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
python Web flask 视图内容和模板实现代码
Aug 23 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 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
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
删除javascript所创建子节点的方法
2015/05/21 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
python求pi的方法
2014/10/08 Python
详解python中requirements.txt的一切
2017/03/03 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
python实现飞机大战小游戏
2019/11/08 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
生产车间主管岗位职责
2013/12/28 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
科技节口号
2014/06/19 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
ubuntu下常用apt命令介绍
2022/06/05 Servers