目录
1. requests模块
简介:requests本身不是python的内部库,需要自行下载,下载需要在python终端执行:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
也可以直接输入:pip install requests
使用代码:
import requests
query = input('输入要搜索的内容:')
url = f"https://www.sohu.com/xchannel/tag?key={query}"
res = requests.get(url)
print(res)
print(res.text)
需要导入模块:import requests
准备一个网址:url
使用 get 进行爬取,返回响应,用 text 转换成文本形式
post请求使用:
import requests
url = "https://fanyi.baidu.com/sug"
s = input('请输入要翻译的英文单词:')
dat = {'kw': s}
# 发送post请求,发送的数据必须是字典,通过data参数传递
res = requests.post(url, data=dat)
print(res.json()) # 将服务器返回的数据转换成json,也就是字典
发送post请求,数据必须是字典,通过data参数传递,返回响应
将服务器返回的数据转换成json,也就是字典
当爬取的网站出现被反爬时,使用参数headers可以简单解决:
# 进行参数处理
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
}
# get请求需要参数params
res = requests.get(url=url, params=param, headers=headers)
2. re模块
| re.findall(字符串) | 匹配字符串所有符合正则的内容 并且会返回一个列表 |
| re.finditer(字符串) | 匹配字符串所有符号条件的内容, 并且返回迭代器 |
| 迭代器.group() | 取得匹配组的内容 |
| re.search(字符串) | 找到一个符合条件的结果就返回,返回的结果是match对象,拿数据需要使用 .group() |
| re.match(字符串) | 从头开始匹配,查到一个符合条件的就返回 |
| re.compile(字符串) | 预加载正则表达式 |
使用的实例:
import re
# findall:匹配字符串所有的符合正则的内容
# 使用 findall 结合元字符,返回的是一个列表,
list1 = re.findall(r'\d+', "我的数字:1000,他的数字:2000")
print(list1)
# finditer:匹配字符串所有的内容,返回迭代器,从迭代器中拿到内容需要 .group
list2 = re.finditer(r'\d+', "我的数字:1000,他的数字:2000")
print(list2)
for i in list2:
# print(i) # 输出迭代器中的详情
print(i.group()) # 返回迭代器中的内容
# search:找到一个符号条件的结果就返回,返回的结果是match对象,拿数据需要.group
list3 = re.search(r'\d+', "我的数字:1000,他的数字:2000")
print(list3.group())
# match:从头开始匹配,查到一个符合条件的就返回
list4 = re.match(r'\d+', "1000,3000,他的数字:2000")
print(list4.group())
# compile:预加载正则表达式
obj = re.compile(r'\d+')
# 使用预加载的迭代器
list5 = obj.finditer("我的数字:1000,他的数字:2000")
for i in list5:
print(i.group())
# 提取想要的数据
s = """
<div>class='sdh'><span id = '1'>小白</span></div>
<div>class='duifgi'><span id = '2'>韩寒</span></div>
<div>class='uirfgh'><span id = '3'>栗子</span></div>
<div>class='gajksg'><span id = '4'>小溪</span></div>
"""
obj1 = re.compile(r"<div>class='(?P<class>.*?)'><span id = '(?P<id>\d+)'>(?P<name>.*?)</span></div>", re.S) # re.S 可与匹配到换行符
list6 = obj1.finditer(s)
for i in list6:
print(i.group("class", "id", "name")) # 输出多个为一个元组
3.xpath模块
简介:xpath是用在xml文档中搜索内容的一门语言,html是xml的子集,使用xpath需要安装lxml包。
1. 导包:from lxml import etree
2.创建对象:对象名 = etree.XML(内容)
3.获取内容:使用 对象.xpath(目录) 可以拿到想要的那内容,返回的结果是一个列表
4.使用 [] 可以拿到第几个相同标签的内容,标签起始从1开始
4.使用 @ + 标签,可以拿到属性值
具体实例:
# xpath 是在xml文档中搜索内容的一门语言
# html是xml的一个子集
# 需要安装lxml包
from lxml import etree # 调用etree模块使用
xml = """
<book category="web">
<title lang="en">XQuery Kick Start</title>
<name>床前明月光</name>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<div>
<author>你是傻掉</author>
</div>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
"""
# 创建etree的对象
tree = etree.XML(xml)
# result = tree.xpath("/book") # 这里的/表示层级关系,第一个/相当根目录,返回一个列表
result = tree.xpath("/book/name/text()") # 拿到name标签里面的内容, text()拿到文本内容
result2 = tree.xpath('/book/author/text()') # 达到同一层级的所有author里面的内容
result3 = tree.xpath('/book//author/text()') # //可以拿到所有//后面那一层级的内容
result4 = tree.xpath('/book/*/author/text()') # /*/ 通配找到节点
print(result) # 输出:['床前明月光']
print(result2) # 输出:['James McGovern', 'Per Bothner', 'Kurt Cagle', 'James Linn', 'Vaidyanathan Nagarajan']
print(result3) # 输出:['James McGovern', 'Per Bothner', 'Kurt Cagle', 'James Linn', '你是傻掉', 'Vaidyanathan Nagarajan']
print(result4) # 输出:['你是傻掉']
1万+

被折叠的 条评论
为什么被折叠?



