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用ConfigObj读写配置文件的实现代码
Mar 04 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
理解Python中函数的参数
Apr 27 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
Python 实现集合Set的示例
Dec 21 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
Python实现生成bmp图像的方法
Jun 13 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
cmd下运行php脚本
2008/11/25 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php 多文件上传的实现实例
2016/10/23 PHP
php之可变变量的实例详解
2017/09/12 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
Python入门篇之编程习惯与特点
2014/10/17 Python
基于Django用户认证系统详解
2018/02/21 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
自荐信结尾
2013/10/27 职场文书
项目经理的岗位职责
2013/11/23 职场文书
技术经理的自我评价范文
2013/12/03 职场文书
岗位明星事迹材料
2014/05/18 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
关于感谢信的范文
2015/01/23 职场文书
绿色环保倡议书
2015/04/28 职场文书
劳动仲裁调解书
2015/05/20 职场文书
圣诞晚会主持词
2015/07/01 职场文书
企业培训简报范文
2015/07/20 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL