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. VB 老旧版本维护系列---迷之集合- ArrayList

    迷之集合- ArrayList '定义一个字符串 Dim dataType_ImageStr As String = "2023,2091,2092,2096,2212" '将字符 ...

  2. JUC 并发编程--09, 阻塞队列: DelayQueue, PriorityBlockingQueue ,SynchronousQueue, 定时任务线程池: ScheduledThreadPoolExecutor

    先看DelayQueue 这个是用优先级队列实现的无界限的延迟队列,直接上代码: /** * 这个是 {@link DelayQueue} 延时队列 的验证使用类 */ class MyDelayed ...

  3. java基础第一节课随笔

    第一题:1.定义一个HelloWold类2.在类中定义主方法3.在主方法中使用输出语句在dos控制台打印HelloWorld 打印结果如:HelloWorld4.在案例中使用当行注释.多行注释添加相关 ...

  4. jmeter--JSON Extractor 用法

    JMeter处理大部分请求返回的结果,都是json.对于请求返回的结果,处理以后作为其他请求的参数,有一个方便使用的插件:JSON Extractor JSON Extractor中文叫做json提取 ...

  5. Task05:SQL高级处理

    5.1 窗口函数 5.1.1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数.OLAP 是OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理. ...

  6. PTA7~9题目集总结与归纳

    前言: 总结三次题目集的知识点.题量.难度等情况. 目录: 题目集7(7-1).(7-2)两道题目的递进式设计分析总结 题目集8和题目集9两道ATM机仿真题目的设计思路分析总结 一. 题目集7(7-1 ...

  7. Windows的静态库与动态库

    Windows的静态库与动态库 1.静态库 1.1 静态库特点 运行不存在 静态库源码被链接到调用程序中 目标程序的归档 1.2 C语言静态库 C静态库的创建 创建一个静态库项目. 添加库程序,源文件 ...

  8. 孟老板 Paging3 (二) 结合Room

    BaseAdapter系列 ListAdapter系列 Paging3 (一) 入门 Paging3 (二) 结合 Room Paging3 (二)  结合Room Paging 数据源不开放, 无法 ...

  9. SQL Prompt快捷键

    1. DF DELETE FROM  2. ssf SELECT * FROM  3. be BEGIN  END 4. ij INNER JOIN  5. ap ALTER PROCEDURE  6 ...

  10. 安聊服务端Netty的应用

    Netty简介 Netty是一个面向网络编程的Java基础框架,它基于异步的事件驱动,并且内置多种网络协议的支持,可以快速地开发可维护的高性能的面向协议的服务器和客户端. 安聊简介 安聊是一个即时聊天 ...