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代码编写的5个优化技巧
Nov 16 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
新手如何发布Python项目开源包过程详解
Jul 11 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
Python 远程开关机的方法
Nov 18 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
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
浅析Ajax语法
2016/12/05 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
python中的闭包用法实例详解
2015/05/05 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
python交互界面的退出方法
2019/02/16 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
详解Python中第三方库Faker
2020/09/25 Python
HTTP状态码详解
2021/03/18 杂记
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
历史系自荐信范文
2013/12/24 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
导航工程专业自荐信
2014/09/02 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2014年度考核工作总结
2014/12/24 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书