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中的is和id用法分析
Jan 26 Python
python实现八大排序算法(1)
Sep 14 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
Python configparser模块配置文件过程解析
Mar 03 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
Python基础之Socket通信原理
Apr 22 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
如何将数据从文本导入到mysql
2006/10/09 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
微信access_token的获取开发示例
2015/04/16 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
JS重要知识点小结
2011/11/06 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
原生JS实现留言板
2020/03/26 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
python实现simhash算法实例
2014/04/25 Python
python中查看变量内存地址的方法
2015/05/05 Python
python+django加载静态网页模板解析
2017/12/12 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
python中np是做什么的
2020/07/21 Python
Python list和str互转的实现示例
2020/11/16 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
美国性感内衣店:Yandy
2018/06/12 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
普通大学毕业生自荐信范文
2014/02/23 职场文书
新闻发布会主持词
2014/03/28 职场文书
2014年文员工作总结
2014/11/18 职场文书
2015大学生求职信范文
2015/03/20 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
JavaScript流程控制(循环)
2021/12/06 Javascript