目录
一、温习,爬取图片的两种方式
方式一:
方式二:
爬取结果如下:
二、正则表达式
三、数据分析(bs4)
Bs4
爬取三国演义整部小说:
源码:
运行结果:
一、温习,爬取图片的两种方式
- 如何爬取图片数据?
- 方式1:基于requests
- 方式2:基于urllib
- urllib模块作用和requests模块一样,都是基于网络请求的模块。
- 当requests问世之后就迅速替代了urllib模块
- 上述两种爬取图片的操作不同之处是什么?
- 使用urllib的方式爬取图片无法进行UA伪装,而requests的方式可以。
方式一:
import requests,urllib
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
img_url = 'https://tenfei01.cfp.cn/creative/vcg/800/new/VCG211345273033.jpg'
response = requests.get(url=img_url,headers=headers)
img_data = response.content #content返回的是二进制形势的响应数据
with open('图片.jpg','wb') as fp:
fp.write(img_data)
方式二:
import requests,urllib
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
img_url = 'https://tenfei01.cfp.cn/creative/vcg/800/new/VCG211345273033.jpg'
#可以直接对url发起请求并进行持久化存储
urllib.request.urlretrieve(img_url,'./图片2.jpg')
爬取结果如下:
- 如何爬取图片数据?
- 方式1:基于requests
- 方式2:基于urllib
- urllib模块作用和requests模块一样,都是基于网络请求的模块。
- 当requests问世之后就迅速替代了urllib模块
- urllib模块作用和requests模块一样,都是基于网络请求的模块。
- 上述两种爬取图片的操作不同之处是什么?
- 使用urllib的方式爬取图片无法进行UA伪装,而requests的方式可以。
import requests,urllib
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
img_url = 'https://tenfei01.cfp.cn/creative/vcg/800/new/VCG211345273033.jpg'
response = requests.get(url=img_url,headers=headers)
img_data = response.content #content返回的是二进制形势的响应数据
with open('图片.jpg','wb') as fp:
fp.write(img_data)
方式二:
import requests,urllib
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
img_url = 'https://tenfei01.cfp.cn/creative/vcg/800/new/VCG211345273033.jpg'
#可以直接对url发起请求并进行持久化存储
urllib.request.urlretrieve(img_url,'./图片2.jpg')
爬取结果如下:
二、正则表达式
正则这块无论是哪门语言都有的,这里不在详细写。下面只是列举些常用的。
正则这块无论是哪门语言都有的,这里不在详细写。下面只是列举些常用的。
| 字符 | 功能 |
|---|---|
| . | 匹配任意1个字符(除了n) |
| [ ] | 匹配[ ]中列举的字符 |
| d | 匹配数字,即0-9 |
| D | 匹配非数字,即不是数字 |
| s | 匹配空白,即空格,tab键 |
| S | 匹配非空白 |
| w | 匹配单词字符,即a-z、A-Z、0-9、_ |
| W | 匹配非单词字符 |
| * | 匹配前一个字符出现0次或者无限次,即可有可无 |
| + | 匹配前一个字符出现1次或者无限次,即至少有1次 |
| ? | 匹配前一个字符出现1次或者0次,要么有一次要么没有 |
| {m} | 匹配前一个字符出现m次 |
| {m,} | 匹配前一个字符至少出现m次 |
| {m,n} | 匹配前一个字符出现从m到n次 |
| ^ | 匹配字符串开头 |
| $ | 匹配字符串结尾 |
| | | 匹配左右任意一个表达式 |
| (ab) | 将括号中字符作为一个分组 |
| num | 引用分组num匹配到字符串 |
| (?P | 分组起别名 |
| (?P=name) | 引用别名为name分组匹配到字符 |
三、数据分析(bs4)
- 数据解析的作用?
- 用来实现聚焦爬虫。
- 网页中显示的数据都是存储在哪里的?
- 都是存储在html的标签中或者是标签的属性中
- 数据解析的通用原理是什么?
- 指定标签的定位
- 取出标签中存储的数据或者标签属性中的数据
Bs4
- bs4解析原理
- 实例化一个BeautifulSoup的对象,且将待解析的页面源码数据加载到该对象中
- 调用BeautifulSoup对象中相关方法或者属性进行标签定位和文本数据的提取
- 环境安装:
- pip install lxml #解析器
- pip install bs4
- BeautifulSoup对象实例化:
- BeautifiluSoup(fp,'lxml'): 用来将本地存储的html文档中的数据进行解析
- BeautifulSoup(page_text,'lxml'): 用来将互联网上请求到的页面源码数据进行解析
- 标签定位:
- soup.tagName: 只可以定位到第一次出现的tagName标签
- soup.find('tagName',attrName='value'): 属性定位
- soup.findAll:跟find一样用作属性定位,只不过findAll返回时候列表
- soup.select('选择器'): 选择器定位
- 类选择器
- id选择器
- 层级选择器
- 空格:表示多个层级
- > :(大于号)表示一个层级
- 取数据
- .text:返回的是该标签下所有的文本内容
- .string:返回的是该标签下直系的文本内容
- 取属性:
- tag['attrName']
爬取三国演义整部小说:
爬取三国全篇内容:https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx
源码:
from bs4 import BeautifulSoup
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
main_url = 'https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx'
page_text = requests.get(url=main_url,headers=headers).text
fp = open('./sanguo.txt','a+',encoding='utf-8')
#数据解析:章节标题,详情页url,章节内容
soup = BeautifulSoup(page_text,'lxml')
#定位到的所有符合要求的a标签
a_list = soup.select('.bookcont > ul > span > a')
for a in a_list:
title = a.string
detail_url =a['href']
#对详情页发起请求解析出章节内容
page_text_detail = requests.get(url=detail_url,headers=headers).text
soup = BeautifulSoup(page_text_detail,'lxml')
div_tag = soup.find('div',class_="contson")
content = div_tag.text
fp.write(title+':'+content+'n')
print(title,'保存成功!')
fp.close()
运行结果:
- 数据解析的作用?
- 用来实现聚焦爬虫。
- 网页中显示的数据都是存储在哪里的?
- 都是存储在html的标签中或者是标签的属性中
- 数据解析的通用原理是什么?
- 指定标签的定位
- 取出标签中存储的数据或者标签属性中的数据
- bs4解析原理
- 实例化一个BeautifulSoup的对象,且将待解析的页面源码数据加载到该对象中
- 调用BeautifulSoup对象中相关方法或者属性进行标签定位和文本数据的提取
- 环境安装:
- pip install lxml #解析器
- pip install bs4
- BeautifulSoup对象实例化:
- BeautifiluSoup(fp,'lxml'): 用来将本地存储的html文档中的数据进行解析
- BeautifulSoup(page_text,'lxml'): 用来将互联网上请求到的页面源码数据进行解析
- 标签定位:
- soup.tagName: 只可以定位到第一次出现的tagName标签
- soup.find('tagName',attrName='value'): 属性定位
- soup.findAll:跟find一样用作属性定位,只不过findAll返回时候列表
- soup.select('选择器'): 选择器定位
- 类选择器
- id选择器
- 层级选择器
- 空格:表示多个层级
- > :(大于号)表示一个层级
- 取数据
- .text:返回的是该标签下所有的文本内容
- .string:返回的是该标签下直系的文本内容
- 取属性:
- tag['attrName']
爬取三国演义整部小说:
爬取三国全篇内容:https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx
源码:
from bs4 import BeautifulSoup
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
main_url = 'https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx'
page_text = requests.get(url=main_url,headers=headers).text
fp = open('./sanguo.txt','a+',encoding='utf-8')
#数据解析:章节标题,详情页url,章节内容
soup = BeautifulSoup(page_text,'lxml')
#定位到的所有符合要求的a标签
a_list = soup.select('.bookcont > ul > span > a')
for a in a_list:
title = a.string
detail_url =a['href']
#对详情页发起请求解析出章节内容
page_text_detail = requests.get(url=detail_url,headers=headers).text
soup = BeautifulSoup(page_text_detail,'lxml')
div_tag = soup.find('div',class_="contson")
content = div_tag.text
fp.write(title+':'+content+'n')
print(title,'保存成功!')
fp.close()
运行结果:
爬取三国全篇内容:https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx
from bs4 import BeautifulSoup
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36',
}
main_url = 'https://so.gushiwen.cn/guwen/book_46653FD803893E4F7F702BCF1F7CCE17.aspx'
page_text = requests.get(url=main_url,headers=headers).text
fp = open('./sanguo.txt','a+',encoding='utf-8')
#数据解析:章节标题,详情页url,章节内容
soup = BeautifulSoup(page_text,'lxml')
#定位到的所有符合要求的a标签
a_list = soup.select('.bookcont > ul > span > a')
for a in a_list:
title = a.string
detail_url =a['href']
#对详情页发起请求解析出章节内容
page_text_detail = requests.get(url=detail_url,headers=headers).text
soup = BeautifulSoup(page_text_detail,'lxml')
div_tag = soup.find('div',class_="contson")
content = div_tag.text
fp.write(title+':'+content+'n')
print(title,'保存成功!')
fp.close()



