zoukankan      html  css  js  c++  java
  • 爬虫---lxml爬取博客文章

      上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地

    爬取博客园博客

    爬取思路:

    1、首先找到需要爬取的博客园地址

    2、解析博客园地址

    # coding:utf-8
    import requests
    from lxml import etree
    # 博客园地址
    url = 'http://www.cnblogs.com/qican/'
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
    }
    html =requests.get(url,headers=headers).text
    # 解析html内容
    xml = etree.HTML(html)

    3、通过博客名称抓取博客标题和详情链接。

    经过分析数据我们需要a标签下的文字和href内容

    # 标题
    title_list = xml.xpath('//div[@class="postTitle"]/a/text()')
    # 链接url
    url_list = xml.xpath('//div[@class="postTitle"]/a/@href')

    4、再次请求博客详情链接获取博客内容

    通过for循环获取到标题,链接内容,然后再次请求博客链接获取博客内容

    for i,j in zip(title_list,url_list):
        # 再次请求博客链接
        r2 = requests.get(j,headers=headers).text
        # 解析内容
        xml_content = etree.HTML(r2)
        # 获取博客内容
        content = xml_content.xpath('//div[@class="postBody"]//text()')

    5、获取的博客内容写入到txt文件中。

    通过with写入txt文件中,这里注意内容的编码格式

    for x in content:
            print(x.strip())
            with open(i+'.txt','a+',encoding='utf-8')as f:
                f.write(x)

    写到这里发现我们都已经把博客内容写入了txt文件中,当然了这只是其中第一页的内容,我们通过观察url链接,发现分页是有page控制的,我们来模拟page数据获取全部博客内容

    代码如下:

    通过for循环获取模拟分页

    # coding:utf-8
    import requests
    from lxml import etree
    # 通过循环模拟url分页
    for page in range(1,4):
    # 博客园地址
        url = 'https://www.cnblogs.com/qican/default.html?page=%s'%page
        print(url)
        headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
        }
        html =requests.get(url,headers=headers).text
        # 解析html内容
        xml = etree.HTML(html)
        # 标题
        title_list = xml.xpath('//div[@class="postTitle"]/a/text()')
        # 链接url
        url_list = xml.xpath('//div[@class="postTitle"]/a/@href')
        for i,j in zip(title_list,url_list):
            print(i)
            # 再次请求博客链接
            r2 = requests.get(j,headers=headers).text
            # 解析内容
            xml_content = etree.HTML(r2)
            # 获取博客内容
            content = xml_content.xpath('//div[@class="postBody"]//text()')
            # 写入内容
            for x in content:
                print(x.strip())
                with open(i+'.txt','a+',encoding='utf-8')as f:
                    f.write(x)

    简单的通过案例又一次加深了lxml的用法,当然方法很多种,喜欢哪种用哪种。~~~

  • 相关阅读:
    ZedBoard学习(6)System Generator实现串口通信(一行HDL代码都不用写)
    ZedBoard学习(1)Ubutun下进行串口通信
    Zedboard学习(7)PS下第一个裸奔程序
    激光雷达(一)数据采集C++
    win7/win8下安装Oracle1出错10g,提示“程序异常终止,发生未知错误”解决方法
    XML文件的加密与解密
    三层中最重要的SqlHelper类
    创建桌面快捷方式的语法
    秋招总结 艾尔夏尔
    thoughtworks二面准备 (三) 艾尔夏尔
  • 原文地址:https://www.cnblogs.com/qican/p/11264889.html
Copyright © 2011-2022 走看看