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. (1)cd ~
  13. (2)mkdir ~/.pip
  14. (3)vi ~/.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. (4)find:找到第一个符合要求的标签
  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. (5)find_all:找到所有符合要求的标签
  28. - soup.find_all('a')
  29. - soup.find_all(['a','b']) 找到所有的a和b标签
  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 + '\n\n\n\n\n')
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

Python+Requests+Bs4(解析)爬取某诗词信息(数据分析二)的更多相关文章

  1. python requests库网页爬取小实例:百度/360搜索关键词提交

    百度/360搜索关键词提交全代码: #百度/360搜索关键词提交import requestskeyword='Python'try: #百度关键字 # kv={'wd':keyword} #360关 ...

  2. Python Requests库网络爬取全代码

    #爬取京东商品全代码 import requestsurl = "http://item.jd.com/2967929.html"try: r = requests.get(url ...

  3. python requests库网页爬取小实例:亚马逊商品页面的爬取

    由于直接通过requests.get()方法去爬取网页,它的头部信息的user-agent显示的是python-requests/2.21.0,所以亚马逊网站可能会拒绝访问.所以我们要更改访问的头部信 ...

  4. python Requests库网络爬取IP地址归属地的自动查询

    #IP地址查询全代码import requestsurl = "http://m.ip138.com/ip.asp?ip="try: r = requests.get(url + ...

  5. python爬虫——用selenium爬取京东商品信息

    1.先附上效果图(我偷懒只爬了4页)  2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...

  6. Python爬虫一:爬取上交所上市公司信息

    前几天领导让写一个从新闻语料中识别上市公司的方案.上市公司属于组织机构的范畴,组织机构识别属于命名实体识别的范畴.命名实体识别包括人名.地名.组织机构等信息的识别. 要想从新闻语料中识别上市公司就需要 ...

  7. 【Python requests多页面爬取案例】

    "```python import requests from fake_useragent import UserAgent # 随机ua库 class Boring(): def __i ...

  8. Python使用urllib,urllib3,requests库+beautifulsoup爬取网页

    Python使用urllib/urllib3/requests库+beautifulsoup爬取网页 urllib urllib3 requests 笔者在爬取时遇到的问题 1.结果不全 2.'抓取失 ...

  9. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

随机推荐

  1. “ compiler-rt”运行时runtime库

    " compiler-rt"运行时runtime库 编译器-rt项目包括: Builtins-一个简单的库,提供了代码生成和其他运行时runtime组件所需的特定于目标的低级接口. ...

  2. python2向python3移植问题

    问题: payload = "A"*140 # padding ropchain = p32(puts_plt) ropchain += p32(entry_point) ropc ...

  3. Redis 入门权威指北

    前言 看看业务遇到了什么问题? 我们要从互联网架构的演变之路开始说起Redis的前世今生. 在我们小的时候,网络世界好像就是只有通过大屁股台式机才能进入一样,彼时的手机只是用来打打电话,发发短信,网上 ...

  4. 【逆向实战】ES文件浏览器未授权访问漏洞(CVE-2019-6447)具体分析及利用

    /作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334 未经许可,禁止转载/ 漏洞简介 CVE-2019-6447是Android端上的一个知名软件:ES文件浏览器的 ...

  5. 【NX二次开发】Block UI 指定方位

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  6. UF_TRNS 变换相关

    Open C uf5940uf5941uf5942  矩阵乘积变换uf5943  平移变换uf5944  缩放变换uf5945  旋转变换uf5946  镜像变换uf5947  实现变换,根据变换矩阵 ...

  7. 【模板】 RMQ求区间最值

    RMQ RMQ简单来说就是求区间的最大值(最小值) 核心算法:动态规划 RMQ(以下以求最大值为例) F[i,j]表示 从 i 开始 到i+2j -1这个区间中的最大值 状态转移方程 F[i,j]=m ...

  8. Electron-Vite2-MacUI桌面管理框架|electron13+vue3.x仿mac桌面UI

    基于vue3.0.11+electron13仿制macOS桌面UI管理系统ElectronVue3MacUI. 前段时间有分享一个vue3结合electron12开发后台管理系统项目.今天要分享的是最 ...

  9. ANDROID开发之GC_CONCURRENT freed

    <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause ...

  10. Spring Boot下的一种导入Excel文件的代码框架

    1.前言 ​ Spring Boot下如果只是导入一个简单的Excel文件,是容易的.网上类似的文章不少,有的针对具体的实体类,代码可重用性不高:有的利用反射机制或自定义注解,开发了Excel导入工具 ...