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判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
python getopt详解及简单实例
Dec 30 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
python自定义时钟类、定时任务类
Feb 22 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
Python PIL库图片灰化处理
Apr 07 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
Django admin组件的使用
Oct 24 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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
VFP与其他应用程序的集成
2006/10/09 PHP
解析php中const与define的应用区别
2013/06/18 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
小程序日历控件使用方法详解
2018/12/29 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
Python数据结构之Array用法实例
2014/10/09 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
介绍一下except的用法和作用
2015/01/22 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
学生评语大全
2014/04/18 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
元宵节寄语大全
2015/02/27 职场文书
趣味运动会赞词
2015/07/22 职场文书
小学大队委竞选口号
2015/12/25 职场文书