栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

The fourth day(上): 正则 + bs4基础

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

The fourth day(上): 正则 + bs4基础

目录

一、温习,爬取图片的两种方式

方式一:

方式二:

爬取结果如下: 

二、正则表达式

三、数据分析(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个字符(除了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()

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/355568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号