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+Selenium自动化实现分页(pagination)处理
Mar 31 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
centos7之Python3.74安装教程
Aug 15 Python
python实现简单图书管理系统
Nov 22 Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
浅析python函数式编程
Sep 26 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
python 爬取吉首大学网站成绩单
Jun 02 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 身份证号验证函数
2009/05/07 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
js 深拷贝函数
2008/12/04 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
详解AngularJS过滤器的使用
2016/03/11 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
vue中轮训器的使用
2019/01/27 Javascript
js实现3D旋转效果
2020/08/18 Javascript
Python yield 小结和实例
2014/04/25 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
python使用socket连接远程服务器的方法
2015/04/29 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python Selenium参数配置方法解析
2020/01/19 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
利用python绘制正态分布曲线
2021/01/04 Python
Python中生成ndarray实例讲解
2021/02/22 Python
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
房屋转让协议书
2014/10/18 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang