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这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...
随机推荐
- fiddler操作详情
1.设置fiddler请求过滤 2.请求与响应的格式内容 3.拦截请求操作 a.按F11开始拦截,发送请求 b.修改请求数据 c.SHIFT+F11关闭拦截 d.run to complete,把修 ...
- MySQL零散知识点(01)
内容概要 --- 表字段操作补充(掌握) --- python操作MySQL(掌握) --- 视图(了解) --- 触发器(了解) --- 存储过程(了解) --- 事务(掌握) --- 内置函数(了 ...
- 分分钟教你Python Web开发框架Django
Python除了爬虫.深度学习(人工智能).数据分析等外,还可以用来开发网站系统,如我们常见的知乎,豆瓣等都是用Python开发的网站系统. 今天辰哥就来教大家如何新建属于自己的Django项目,让D ...
- Java知识,面试总会问到虚拟机,虚拟机类加载机制你懂吗?
虚拟机把描述类的数据从Class文件文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 与那些在编译时需要进行连接工作的语言不同 ...
- Mybatis 中经典的 9 种设计模式!面试可以吹牛了
虽然我们都知道有23个设计模式,但是大多停留在概念层面,真实开发中很少遇到.Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式. Mybatis至少 ...
- 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)
要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...
- Redis:我是如何与客户端进行通信的
江湖上说,天下武功,无坚不摧,唯快不破,这句话简直是为我量身定制. 我是一个Redis服务,最引以为傲的就是我的速度,我的 QPS 能达到10万级别. 在我的手下有数不清的小弟,他们会时不时到我这来存 ...
- 日志挖掘针对DML语句
作用: 针对用户的误操作,比如更改数据错误,误删除表等,可以用日志挖掘的方式,跟踪哪个用户什么时候做的操作,并进行数据还原. 一.前期准备: 1.添加最小补充日志,能够记录到更详细的信息,为日志挖掘分 ...
- QObject::startTimer: timers cannot be started from another thread 一则输出调试:关于QT的线程关联性
开始 今天在调试输出里看见QObject::startTimer: timers cannot be started from another thread QTimer类 从Qt的帮助文档里可以得到 ...
- ECS实例中的应用偶尔出现丢包现象并且内核日志(dmesg)存在“kernel: nf_conntrack: table full, dropping packet”的报错信息
问题描述 连接ECS实例中的应用时偶尔出现丢包现象.经排查,ECS实例的外围网络正常,但内核日志(dmesg)中存在"kernel: nf_conntrack: table full, dr ...