首页 > 编程语言 >python爬虫—学习笔记-4

python爬虫—学习笔记-4

时间:2024-04-23 21:23:37浏览次数:35  
标签:span title python 标签 爬虫 笔记 soup print select

课堂内容:

  1. 删除原导出文件的venv,pycham打开此文夹,重新创建本地虚拟编译器。

image-20240423210215516

  1. 安装依赖库,打开pycham终端输入pip install -r yilaiku.txt,安装依赖库中的库。

image-20240423210234782

  1. 继续安装bs4、lxml库,命令为:pip install bs4 和 pip install lxml。

image-20240423210249649

  1. 安装好后,pycham来到spiders目录下,新建Python项目“spider422”,爬取豆瓣250的首页HTML;

代码为:

import requests
import re
url="https://movie.douban.com/top250"
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
response=requests.get(url,headers=headers)
with open('h422.html',mode='w',encoding='utf-8')as f:
    f.write(response.text)

通过request识别网页信息,获取相应信息,最后写入“h422.html”文件中

  1. 通过bs4库解析网页中的相关信息。

代码如下:

也可用import bs4直接导入库

from bs4 import BeautifulSoup as bs //导入bs4库中的BeautifulSoup并命名为bs

with open('h422.html',mode='r',encoding='utf-8') as f:
    text =f.read()  //打开h422.html并存入text中
    
soup = bs(text,"html.parser") //通过标准的html库解析
#获取标签
# print(soup.title)
# print(soup.span)
#获取标签文本
# print(soup.title.text)
# print(soup.title.string)
#获取标签名
# print(soup.title.name)
#获取上一级标签
# print(soup.title.parent)
#获取上一级标签名
# print(soup.title.parent.name)
#获取标签属性值
# print(soup.span['class'])
# print(soup.span.get('class'))
# print(soup.span.get('id'))
#通过find获取
print(soup.find('span', class_='title')) //通过find方式获取

image-20240423210437314

6.获取所以标签的内容

#通过findAll获取所以标签
print(soup.findAll('span',class_ = 'title'))
#通过循环语句单独查出标签中的内容
items = soup.findAll('span',class_ = 'title')
for item in items:
    print(item.text)

image-20240423210506660

7.通过select来筛选需要的标签以及层级关系筛选。

应用select参数来筛选要的东西
# print(soup.select('span'))
#单独应用select层级筛选
# print(soup.select('span.title'))
# print(soup.select('span#icp'))

print(soup.select('div > p.pl'))

image-20240423210540859

当然网页中F12可以直接复制select元素,就可以应用select层级筛选

image-20240423210549159

8.数据清洗,运用splist和join进行数据清洗。

#利用split和join进行数据清洗
items = soup.select('span.title') //获取数据
namelist=[]
for item in items:
    name = "".join(item.text.split(maxsplit=1)) //以第一个空格为删除条件删除后连接两个数据
    if name[0]=='/':
        namelist[-1] += name 
    else:
        namelist.append(name)

print(namelist)

image-20240423210619566

附加知识:

Pycham****更换软件包镜像源:

image-20240423210638054

image-20240423210643072

image-20240423210647676

清华: https://pypi.tuna.tsinghua.edu.cn/simple

豆瓣: http://pypi.douban.com/simple/

阿里: http://mirrors.aliyun.com/pypi/simple/

Beautifulsoup的各种用法:

beautifulsoup:HTML或XML文件数据解析库

安装bs4,lxml(有的需要安装)

导入:from bs4 import BeautifulSoup as bs

解析指定内容:soup = beautifulsoup(解析内容,解析器)

解析器:

\1. python 标准库:‘html.parser':

2.lxml:

with open('h1.html',mode='r',encoding='utf-8') as f:

text = f.read()

# 定义解析对象:

soup = bs(text,'html.parser')

#标签:

print(soup.title)

print(soup.span) #输出第一个span标签

#标签文本

print(soup.title.text)

或者:

print(soup.title.string)

#标签名称:

print(soup.title.name)

#父级标签

print(soup.title.parent)

#父级标签名称:

print(soup.title.parent.name)

#第一个span 标签的class属性值:

soup.span['class']

soup.span.get('class')

soup.span.get('id') #没有则返回none

#指定属性值的标签:

print(soup.find('span', class_='title')) #注:class因为是关键字,要加下划线

print(soup.find('span', {'class': 'title'}))

#所有相同属性名标签的获取:

print(soup.findAll('span', class_='title'))

print(soup.findAll('span', {'class': 'title'}))

print(soup.findAll('span',attrs={'class':'title'}))

数据清洗:

split() 方法语法:str.split(str="",maxsplit=string.count(str))[n]

​ 功能:用指定字符分割字符串,分割结果为列表,默认分割符为空格

join函数语法:'sep'.join(sep_object),

​ 功能:连接任意数量的字符串(包括要连接的元素字符串、元组、列表、字典),用新的目标分隔符连接,返回新的字符串。

namelist=[]

for i in soup.findAll('span', {'class': 'title'}):

# 字符串处理:(数据清洗)

name="".join(i.text.split())

if name[0]=='/':

​ namelist[-1] += name

else:

​ namelist.append(name)

print(namelist)

获取图片url:

for i in soup.findAll('img'):

print(i.get('src'))

常用的字符处理函数(方法):

strip():删除字符串开头和结尾的空格或或指定字符

格式:str.strip([chars]),不指定参数时删除开头或结尾处的空格

字符串拼接:+

替换字符:replace():

格式:str.replace(old, new[, max])

大小写转换方法:lower,upper()

len( )函数计算字符串的长度

capitalize( )方法将字符串首字母大写

find()方法:查找指定字符(串)的起始位置,找不到返回-1

startswith( )方法判断字符串的开头字符(串)

endswith( )方法判断字符串的结尾字符(串)

isdigit( )方法判断字符串是否由数字组成

isalpha( )方法判断字符串是否由字母组成

isalnum( )方法判断字符串是否由数字和字母组成

select 选择器

用于选取特定标签,选取规则依赖于css,所有叫css选择器

# select 选择器

# 所有span标签

# print(soup.select('span'))

#特定类名的标签

# print(soup.select('.title'))

# # 指定id的标签

# print(soup.select('#dale_movie_top250_bottom_right'))

# 组合

# items=soup.select('span.title')

#string,text:查看文本,attrs查看所有属性,查看某个属性:attrs['class']

# for item in items:

# print(item.string,item.text,item.attrs)

# print('---------------------------------------')

# print(soup.select('div#footer'))

# 递进选择

print(soup.select('div > p.pl'))#直接父子关系

print(soup.select('div.info span.title'))#不直接(用空格)

https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#id41

标签:span,title,python,标签,爬虫,笔记,soup,print,select
From: https://www.cnblogs.com/windfengyu/p/18153764

相关文章

  • [哈工大软件工程期末考试] 《软件过程与项目管理》复习笔记
    软件过程与项目管理复习第一章:软件及软件工程软件的概念什么是软件?软件是一组对象或项目所形成的一个“配置”,由程序、文档、数据等部分构成。软件的四大特性复杂性不可见性易变性一致性软件工程的发展软件的发展阶段第一阶段主要用于数值计算的需求完全依......
  • Python字符串过滤器:正则表达式Regular Expression
    一、什么是正则表达式正则表达式是按照正确的既定规则、一种全语言类型Python、Java、JavaScript、PHP通用的表达式。用途:(1)根据规则抓取数据:配合爬虫、根据规则在文本中提取数据(2)根据规则验证数据:验证手机号、验证邮箱、验证身份证二、如何在Python中使用正则表达式在Python......
  • 在 Python 中的contains
    点击查看代码在Python中,contains通常是指检查一个元素是否存在于某个数据结构(如列表、元组、字符串、集合等)中。然而,Python中并没有一个名为contains的内置函数。相反,我们使用in关键字来实现类似的功能。以下是一些使用in关键字检查元素是否存在于不同数据结构中的......
  • Python 函数和变量作用域
    变量引用顺序Python引用变量的顺序:当前作用域局部变量->外层作用域变量->当前模块中的全局变量->Python内置变量。1、globalglobal关键字用来在函数或其他局部作用域中使用全局变量,如果不对全局变量进行修改,那么可以不使用global关键字;如果想要在函数或局部作用域中对全局变......
  • 用Python程序如何捕获Ctrl+C终止信号?
    对于一些连续运行或者长时间运行的Python程序而言,如服务器的后端,或者是长时间运行的科学计算程序。当我们涉及到一些中途退出的操作时,比如使用Ctrl+C来退出正在运行的程序。这种场景的出现一般有两个可能性:一是程序出现了问题,需要终止程序来对其进行调整。另一种是程序本身是正......
  • Python中列表和字符串的反转
    一、Python现成的反转功能:在Python中有专门进行列表反转的函数--reverse()l=[13,30,42,85,9,45]l.reverse()#[45,9,85,42,30,13]还可以使用切片操作进行列表反转l=[13,30,42,85,9,45]print(l[::-1])#[45,9,85,42,30,13]关于字符串的反转,并没......
  • Python中的私有属性与私有方法
    关于Python中的私有属性和私有方法Python对于类的成员没有严格的访问控制限制,这与其他面相对对象语言有区别。关于私有属性和私有方法,有如下要点:1、通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public);2、类内部可以访问私有属性(方法);3、类外部不能直接访问......
  • python3下安装mysqlclient各种报错 raise OSError mysql_config not found
    linux下载地址:https://files.pythonhosted.org/packages/a5/e1/e5f2b231c05dc51d9d87fa5066f90d1405345c54b14b0b11a1c859020f21/mysqlclient-2.0.1.tar.gz#sha256=fb2f75aea14722390d2d8ddf384ad99da708c707a96656210a7be8af20a2c5e5在服务器执行pipinstallmysqlclient-2.0.......
  • 接口测试方法:Spring boot Test、python、postman
    一般的rest接口在pom.xml中加入org.springframework.bootspring-boot-starter-testtest新建测试类@RunWith(SpringRunner.class)@SpringBootTestpublicclassUserControllerTest{privateMockMvcmvc;//初始化执行@BeforepublicvoidsetUp()throwsException......
  • Python 中删除文件夹下文件的方法详解
    前言在编写和维护Python脚本时,经常会遇到需要删除文件夹中特定文件的情况。Python提供了多种方法来实现这一目标,本文将介绍几种常用的方法,以及它们的优缺点和适用场景。方法一:使用os模块Python的os模块提供了操作文件系统的功能,可以轻松实现删除文件夹下的文件。下面......