【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)

今天小麦苗给大家分享的是【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)。

【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)

第一篇( http://blog.itpub.net/26736162/viewspace-2286553/ )是将地址写入了txt文本文件中,这篇博客将爬取到的结果写入Excel表格中。

Python爬取的源代码:

import requests
import re
import xlwt
url = 'http://blog.itpub.net/26736162/list/%d/'
pattern = re.compile(r'<a target=_blank href="(.*?)" class="w750"><p class="title">(.*?)</p></a>')
# pattern=re.compile(r'<a target=_blank href="(.*?)" class="w750"><p class="title">')
# ret=pattern.findall(data)
# print(''.join(ret))
# def write2file(items):
#     with open('./download/lhrbest_itpub_link_title.txt','a',encoding='utf-8') as fp:
#         for item in items:
#             item=item[::-1]
#             s=':'.join(item)
#             # print('----',len(items))
#             fp.write(s+'\n')
#             # fp.write('---------------------------------------------------------------\n')
#     pass
def set_style(name, height,colour_index,horz=xlwt.Alignment.HORZ_LEFT,bold=False):
    style = xlwt.XFStyle()  # 初始化样式
    font = xlwt.Font()  # 为样式创建字体
    font.name = name
    font.bold = bold
    font.colour_index = colour_index  # 1白2红3绿4蓝5黄 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan
    font.height = height #0x190是16进制,换成10进制为400,然后除以20,就得到字体的大小为20
    style.font = font
    # 设置单元格对齐方式
    alignment = xlwt.Alignment()  # 创建alignment
    alignment.horz = horz  # 设置水平对齐为居中,May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
    alignment.vert = xlwt.Alignment.VERT_CENTER  # 设置垂直对齐为居中,May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
    style.alignment = alignment  # 应用alignment到style3上
    # 设置单元格边框
    borders = xlwt.Borders()  # 创建borders
    borders.left = xlwt.Borders.DASHED  # 设置左边框的类型为虚线 May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
    borders.right = xlwt.Borders.THIN  # 设置右边框的类型为细线
    borders.top = xlwt.Borders.THIN  # 设置上边框的类型为打点的
    borders.bottom = xlwt.Borders.THIN  # 设置底部边框类型为粗线
    borders.left_colour = 0x10  # 设置左边框线条颜色
    borders.right_colour = 0x20
    borders.top_colour = 0x30
    borders.bottom_colour = 0x40
    style.borders = borders  # 将borders应用到style1上
    return style
def init_excel():
    f = xlwt.Workbook(encoding='gbk')  # 创建工作薄
    # 创建个人信息表
    sheet1 = f.add_sheet(u'小麦苗itpub博客链接地址', cell_overwrite_ok=True)
    sheet1.col(0).width = 256 * 50
    sheet1.col(1).width = 256 * 50
    rowTitle = [u'博客文章标题', u'链接地址']
    # rowDatas = [[u'张一', u'男', u'18'], [u'李二', u'女', u'20'], [u'黄三', u'男', u'38'], [u'刘四', u'男', u'88']]
    for i in range(0, len(rowTitle)):
        sheet1.write(0, i, rowTitle[i], set_style('Courier New', 220, 2, xlwt.Alignment.HORZ_CENTER, True))  # 后面是设置样式
    f.save('./download/excel_write_base.xlsx')
    return  f,sheet1
# 写excel
def write_excel(rowDatas,f,rowIndex):
    f_excel=f[0]
    f_sheet=f[1]
    rowIndex= rowIndex if rowIndex == 0 else rowIndex*20
    for k in range(0, len(rowDatas)):  # 先遍历外层的集合,即每行数据
            for j in range(0, len(rowDatas[k])):  # 再遍历内层集合
                if j == 1:
                    # 写入数据,k+1表示先去掉标题行,另外每一行数据也会变化,j正好表示第一列数据的变化,rowdatas[k][j] 插入数据
                    f_sheet.write(k +rowIndex+ 1, j,
                                 xlwt.Formula('HYPERLINK("%s","%s")' % (rowDatas[k][::-1][j], rowDatas[k][::-1][j])),set_style('Courier New', 180,4))
                else:
                    f_sheet.write(k +rowIndex+ 1, j, rowDatas[k][::-1][j],set_style('Courier New', 180,0))
                f_excel.save('./download/excel_write_base.xlsx')
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}
def loadHtml(page):
    if page >= 1:
        f=init_excel() #初始化一个Excel工作簿,包括sheet
        for p in range(1, page + 1):
            url_itpub = url % (p)
            print(url_itpub)
            response = requests.get(url=url_itpub, headers=headers)
            response.encoding = 'utf-8'
            content = response.text
            # print(content)
            # Ctrl + Alt + V:提取变量
            items = pattern.findall(content)
            # print(items)
            # write2file(items)
            write_excel(items,f,p-1)
        pass
    else:
        print('请输入数字!!!')
    pass
if __name__ == '__main__':
    page = int(input('请输入需要爬取多少页:'))
    loadHtml(page)

About Me:小麦苗

● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

本文分享自微信公众号 - DB宝(xiaomaimiaolhr)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小詹同学

讲真,做Python一定不要只会一个方向!

最近不少人在微信问我现在Python还好就业不好就业?发展前景怎么样?我30多岁了,还能不能转行编程?Python该怎么学?如果做Python到底该做爬虫还是数...

10220
来自专栏二狗的DBA之路

windows上安装 MySQL-python包的方法

安装过程中,遇到很多问题,终于解决了,贴下我的解决步骤。也为了其它小伙伴们少采坑。

7720
来自专栏JAVAandPython君

Python可视化学习(饼状图,坐标系...)

今天资源君带大家学习一下Python的可视化,何谓可视化呢?我们常常听说Python的数据分析,数据分析中很重要的一个就是将数据展示出来,如何展示出来呢...

28910
来自专栏小詹同学

深入理解 Python 中的上下文管理器

操作文本对象的时候,几乎所有的人都会让我们要用 with open ,这就是一个上下文管理的例子。你一定已经相当熟悉了,我就不再废话了。

6630
来自专栏小詹同学

Python官方最后通牒:Python 2传奇20年将落幕,Python 3接力!

Python官方非常正式的在官网上发表一封公开信,再次强调Python 2将于2020年元旦停止维护!之后,官方将不会再对任何bug、安全漏洞进行任何更新或者修...

8530
来自专栏JAVAandPython君

10分钟带你学完Python基础

这篇文章是我总结的python的基础,同时也参考了一些资料,内容不是特别全面,目的是带大家来看看Python里面非常基础的一些东西,想要更详细的了解,大家可以去...

10360
来自专栏量子位

Kaldi拜拜!PyTorch语音工具包SpeechBrain要来了,支持多种语音任务,实现最强水准

现在,图灵奖得主、AI三巨头之一Yoshua Bengio领衔的研究机构Mila宣布,要联合英伟达、杜比、三星、PyTorch官方、IBM AI研究院等公司和机...

15820
来自专栏小詹同学

Python数据分析实战基础 | 初识Pandas

这段时间和一些做数据分析的同学闲聊,我发现数据分析技能入门阶段存在一个普遍性的问题,很多凭着兴趣入坑的同学,都能够很快熟悉Python基础语法,然后不约而同的一...

13740
来自专栏MeteoAI

Cartopy调用天地图作为底图

在捍卫祖国领土从每一张地图开始,Python绘制气象实用地图[Code+Data](续)中我们介绍了cartopy这个库,专门用于绘制地图和地理空间信息分析的p...

43130
来自专栏安恒网络空间安全讲武堂

通过SSH隧道传递票证

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和...

9730

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励