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的用法,当然方法很多种,喜欢哪种用哪种。~~~

  • 相关阅读:
    解决Oracle XE报错ORA-12516(oracle回话数超出限制)
    端口被占用如何处理
    ORACLE initialization or shutdown in progress 错误解决办法
    oracle的闪回功能
    Linux入门
    oracle字段like多个条件
    navicat常用快捷键与SQL基本使用
    Oracle四舍五入,向上取整,向下取整
    无限循环小数化分数
    筛选素数
  • 原文地址:https://www.cnblogs.com/qican/p/11264889.html
Copyright © 2011-2022 走看看