Python+Requests+Bs4(解析)爬取某诗词信息(数据分析二)
1、环境安装
- 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等- windows(1)打开文件资源管理器(文件夹地址栏中)(2)地址栏上面输入 %appdata%(3)在这里面新建一个文件夹 pip(4)在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可[global]timeout = 6000index-url = https://mirrors.aliyun.com/pypi/simple/trusted-host = mirrors.aliyun.com- linux(1)cd ~(2)mkdir ~/.pip(3)vi ~/.pip/pip.conf(4)编辑内容,和windows一模一样- 需要安装:pip install bs4bs4在使用时候需要一个第三方库,把这个库也安装一下pip install lxml
2、基本使用
使用流程:- 导包:from bs4 import BeautifulSoup- 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的节点内容(1)转化本地文件:- soup = BeautifulSoup(open('本地文件'), 'lxml')(2)转化网络文件:- soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')(3)打印soup对象显示内容为html文件中的内容基础巩固:(1)根据标签名查找- soup.a 只能找到第一个符合要求的标签(2)获取属性- soup.a.attrs 获取a所有的属性和属性值,返回一个字典- soup.a.attrs['href'] 获取href属性- soup.a['href'] 也可简写为这种形式(3)获取内容- soup.a.string- soup.a.text- soup.a.get_text()【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容(4)find:找到第一个符合要求的标签- soup.find('a') 找到第一个符合要求的- soup.find('a', title="xxx")- soup.find('a', alt="xxx")- soup.find('a', class_="xxx")- soup.find('a', id="xxx")(5)find_all:找到所有符合要求的标签- soup.find_all('a')- soup.find_all(['a','b']) 找到所有的a和b标签- soup.find_all('a', limit=2) 限制前两个(6)根据选择器选择指定的内容select:soup.select('#feng')- 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器- 层级选择器:div .dudu #lala .meme .xixi 下面好多级div > p > a > .lala 只能是下面一级【注意】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(解析)爬取某诗词信息(数据分析二)的更多相关文章
- python requests库网页爬取小实例:百度/360搜索关键词提交
百度/360搜索关键词提交全代码: #百度/360搜索关键词提交import requestskeyword='Python'try: #百度关键字 # kv={'wd':keyword} #360关 ...
- Python Requests库网络爬取全代码
#爬取京东商品全代码 import requestsurl = "http://item.jd.com/2967929.html"try: r = requests.get(url ...
- python requests库网页爬取小实例:亚马逊商品页面的爬取
由于直接通过requests.get()方法去爬取网页,它的头部信息的user-agent显示的是python-requests/2.21.0,所以亚马逊网站可能会拒绝访问.所以我们要更改访问的头部信 ...
- python Requests库网络爬取IP地址归属地的自动查询
#IP地址查询全代码import requestsurl = "http://m.ip138.com/ip.asp?ip="try: r = requests.get(url + ...
- python爬虫——用selenium爬取京东商品信息
1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Headless无弹窗模式 options = webdri ...
- Python爬虫一:爬取上交所上市公司信息
前几天领导让写一个从新闻语料中识别上市公司的方案.上市公司属于组织机构的范畴,组织机构识别属于命名实体识别的范畴.命名实体识别包括人名.地名.组织机构等信息的识别. 要想从新闻语料中识别上市公司就需要 ...
- 【Python requests多页面爬取案例】
"```python import requests from fake_useragent import UserAgent # 随机ua库 class Boring(): def __i ...
- Python使用urllib,urllib3,requests库+beautifulsoup爬取网页
Python使用urllib/urllib3/requests库+beautifulsoup爬取网页 urllib urllib3 requests 笔者在爬取时遇到的问题 1.结果不全 2.'抓取失 ...
- 一个月入门Python爬虫,轻松爬取大规模数据
Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...
随机推荐
- MinkowskiEngine基准测试
MinkowskiEngine基准测试 介绍卷积层和小型U网络的前馈和后馈通过时间.可以将具有相同张量步幅,步幅和内核偏移的内核映射重新用于其他层,可以在大型nueral网络中使用的所有层上,分摊此页 ...
- go-zero:开箱即用的微服务框架
go-zero 是一个集成了各种工程实践的 Web 和 rpc 框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验. go-zero 在设计时遵循了 "工具大于约定和 ...
- 【C++】Vector判断元素是否存在,去重,求交集,求并集
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> //sort函数.交并补函数 4 ...
- spring赌上未来的一击:WebFlux性能实测
最近花了一点时间系统的测试验证了在SpringBoot框架下使用SpringMVC和Spring WebFlux两种框架开发接口,对比了响应时间以及压测吞吐量的区别. WebFlux&Spri ...
- iNeuOS工业互联网平台,在高校教学实训领域的应用
目 录 1. 概述... 2 2. 实训柜... 2 3. 培训内容... 4 4. 二次开发培训... 5 1. 概述 中国工业互联网从 0 ...
- 题解 P5318 【【深基18.例3】查找文献】
题目传送门 根据本蒟蒻细致粗略的分析 这明显是一道水题模(du)板(liu)题 可我竟然没有一遍AC; 为更好地食用本题解需要了解以下内容 1.dfs(大法师深搜) 2.bfs(冰法师广搜)/dij最 ...
- 一起来聊聊 IP 地址、局域网、广域网、IPV4 和 IPV6
背景 谁都知道 IP 地址是干嘛的,但是它出现的前因后果你真的知道吗? 我觉得很有必要重新复习下计算机网络基础知识,实在太太太重要了 本篇文章素材均来自:https://www.bilibili.co ...
- gRPC趁现在还没大火,抢先了解一下
前言 系统分布式已经成为程序员的家常,将大型单体划分为相对简单的小模块,分散系统能力,提升系统扩展性.功能模块复用性等:各功能模块之间肯定会有很多数据共享和交互的应用场景,那就避免不了各模块之间的通信 ...
- TS基础应用 & Hook中的TS
说在前面 本文难度偏中下,涉及到的点大多为如何在项目中合理应用ts,小部分会涉及一些原理,受众面较广,有无TS基础均可放心食用. **>>>> 阅完本文,您可能会收获到< ...
- Linux-NFS存储
1.什么是NFS NFS是Network File System 的缩写,中文意思是网络文件共享系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2.NFS存储服务 ...