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 struct模块解析
Jun 12 Python
Python原始字符串(raw strings)用法实例
Oct 13 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
深入理解python中函数传递参数是值传递还是引用传递
Nov 07 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
python实现WebSocket服务端过程解析
Oct 18 Python
详解python中*号的用法
Oct 21 Python
python爬虫实现POST request payload形式的请求
Apr 30 Python
python 基于卡方值分箱算法的实现示例
Jul 17 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 mkdir()定义和用法
2009/01/14 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
Js+XML 操作
2006/09/20 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
vue登录注册及token验证实现代码
2017/12/14 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python人人网登录应用实例
2014/09/26 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
常见的python正则用法实例讲解
2016/06/21 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
python实现简单的文字识别
2018/11/27 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python中eval与int的区别浅析
2019/08/11 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
教师评语大全
2014/04/28 职场文书
公司活动总结范文
2014/07/01 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
关于运动会的广播稿
2014/09/22 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书