• Python+Requests+Bs4(解析)爬取某诗词信息(数据分析二)


    1、环境安装

    1. - 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
    2. - windows
    3. 1)打开文件资源管理器(文件夹地址栏中)
    4. 2)地址栏上面输入 %appdata%
    5. 3)在这里面新建一个文件夹 pip
    6. 4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
    7. [global]
    8. timeout = 6000
    9. index-url = https://mirrors.aliyun.com/pypi/simple/
    10. trusted-host = mirrors.aliyun.com
    11. - linux
    12. 1cd ~
    13. 2mkdir ~/.pip
    14. 3vi ~/.pip/pip.conf
    15. 4)编辑内容,和windows一模一样
    16. - 需要安装:pip install bs4
    17. bs4在使用时候需要一个第三方库,把这个库也安装一下
    18. pip install lxml

    2、基本使用

    1. 使用流程:
    2. - 导包:from bs4 import BeautifulSoup
    3. - 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的节点内容
    4. 1)转化本地文件:
    5. - soup = BeautifulSoup(open('本地文件'), 'lxml')
    6. 2)转化网络文件:
    7. - soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')
    8. 3)打印soup对象显示内容为html文件中的内容
    9. 基础巩固:
    10. 1)根据标签名查找
    11. - soup.a 只能找到第一个符合要求的标签
    12. 2)获取属性
    13. - soup.a.attrs 获取a所有的属性和属性值,返回一个字典
    14. - soup.a.attrs['href'] 获取href属性
    15. - soup.a['href'] 也可简写为这种形式
    16. 3)获取内容
    17. - soup.a.string
    18. - soup.a.text
    19. - soup.a.get_text()
    20. 【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
    21. 4find:找到第一个符合要求的标签
    22. - soup.find('a') 找到第一个符合要求的
    23. - soup.find('a', title="xxx")
    24. - soup.find('a', alt="xxx")
    25. - soup.find('a', class_="xxx")
    26. - soup.find('a', id="xxx")
    27. 5find_all:找到所有符合要求的标签
    28. - soup.find_all('a')
    29. - soup.find_all(['a','b']) 找到所有的ab标签
    30. - soup.find_all('a', limit=2) 限制前两个
    31. 6)根据选择器选择指定的内容
    32. select:soup.select('#feng')
    33. - 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器
    34. - 层级选择器:
    35. div .dudu #lala .meme .xixi 下面好多级
    36. div > p > a > .lala 只能是下面一级
    37. 【注意】select选择器返回永远是列表,需要通过下标提取指定的对象

    3、项目实战巩固一:

    需求:使用bs4实现将诗词名句网站中三国演义小说的每一章的内容爬去到本地磁盘进行存储 http://www.shicimingju.com/book/sanguoyanyi.html

    # -*- coding:utf-8 -*-
    # 1. 爬取章节
    # 2. 爬取对应内容
    from bs4 import BeautifulSoup
    import requests
    import os

    # 新建文件夹用来存储三国
    if not os.path.exists('./sanguo'):
    os.makedirs('./sanguo')

    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
    }
    def parse_content(url):
    #获取标题正文页数据
    page_text = requests.get(url,headers=headers).text
    soup = BeautifulSoup(page_text,'lxml')
    #解析获得标签
    ele = soup.find('div',class_='chapter_content')
    content = ele.text #获取标签中的数据值
    return content

    if __name__ == '__main__':

    url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
    # 调用get请求获取text字符串
    response = requests.get(url=url, headers=headers)
    # 手动设置响应数据的编码格式
    response.encoding = 'utf-8'
    page_text = response.text
    #创建soup对象
    soup = BeautifulSoup(page_text, 'lxml')
    # 解析数据
    a_eles = soup.select('.book-mulu > ul > li > a')
    filepath = './sanguo/'+'sanguo.txt'
    cap = 1
    for src in a_eles:
    print('开始下载第%d章节' % cap)
    cap += 1
    title = src.string
    # 通用处理中文乱码的解决方案
    # title = title.encode('iso-8859-1').decode('gdk')
    detail_url = 'https://www.shicimingju.com' + src['href']
    print(detail_url)
    content = parse_content(detail_url)
    with open(filepath, 'w', encoding='utf-8') as fp:
    fp.write(title + ":" + content + ' ')
    print('结束下载第%d章节' % cap)
    4、项目巩固二

    需求:使用bs4实现将糗事百科图片进行循环分页爬取: https://www.qiushibaike.com/imgrank/page/1

     from bs4 import BeautifulSoup

    import requests
    import re
    import os

    # headers请求头信息
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
    }
    # 新建文件夹用来存储糗事图片
    if not os.path.exists('./qiushiLibsNew'):
    os.makedirs('./qiushiLibsNew')

    # Url进行封装循环分页爬取
    url = 'https://www.qiushibaike.com/imgrank/page/%d/'

    def page_index(index):

    for page in range(1, index):
    new_url = format(url % page)
    # 调用get请求获取text字符串
    page_source = requests.get(url=new_url, headers=headers).text
    # Bs4实例化
    soup = BeautifulSoup(page_source, 'lxml')
    # 返回list数组
    # select 获取属性值
    img_src_list = soup.select('.thumb > a')
    for src in img_src_list:
    src = src.img['src']
    # 遍历拼接图片URL
    src = 'https:' + src
    # 下载图片新建请求
    # 以二进制流的方式存储
    img_content = requests.get(url=src, headers=headers).content
    # print(img_content)
    # 生成图片的名称
    imgName = src.split('/')[-1]
    # 图片路径
    imgPath = './qiushiLibsNew/' + imgName
    # 持久化存储
    with open(imgPath, 'wb') as fp:
    fp.write(img_content)
    print(imgName, '下载成功!!!')

    if __name__ == '__main__':
    while True:
    try:
    values = int(input('请输入站点页分页数:'))
    page_index(values)
    except Exception as msg:
    print('输入错误,错误信息为{}'.format(msg))
    finally:
    break
  • 相关阅读:
    pku2226 Muddy Fields
    pku3715 Blue and Red
    关于二分图的最大权匹配
    pku 2262&& pku 2739 && pku 3006
    pku2060 Taxi Cab Scheme
    pku 1486 Sorting Slides
    id、css命名规范
    Git 常用命令
    sublime text3插件使用
    Java实现数据结构栈stack和队列Queue
  • 原文地址:https://www.cnblogs.com/Teachertao/p/14732365.html
Copyright © 2020-2023  润新知