发布于2023-10-15 20:08 阅读(11086) 评论(0) 点赞(9) 收藏(2)
为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
- BeautifulSoup 是一个 Python 库,用于网络爬虫目的。它提供了一种方便和高效的方式来从 HTML 和 XML 文档中提取数据。使用 BeautifulSoup,你可以解析和遍历 HTML 结构,搜索特定元素,并从网页中提取相关数据。
- 该库支持不同的解析器,如内置的 Python 解析器、lxml 和 html5lib,允许你根据特定需求选择最适合的解析器。BeautifulSoup 的优势在于它能够处理格式混乱或损坏的 HTML 代码,使其成为处理复杂情况下的网络爬虫任务的强大工具。
import requests
from bs4 import BeautifulSoup
# 发送请求获取 HTML
response = requests.get(url)
html = response.text
# 创建 Beautiful Soup 对象
soup = BeautifulSoup(html, 'html.parser')
# 通过选择器选择 DOM 元素进行操作
element = soup.select('#my-element')
import requests
from lxml import etree
# 发送请求获取 HTML
response = requests.get(url)
html = response.text
# 创建 lxml HTML 解析器对象
parser = etree.HTMLParser()
# 解析 HTML
tree = etree.fromstring(html, parser)
# 通过XPath选择 DOM 元素进行操作
elements = tree.xpath('//div[@class="my-element"]')
在Python中,你可以使用多种库和方法来获取HTML标签里面的文本。以下是几种常见的方法:
from bs4 import BeautifulSoup
# 假设html为包含标签的HTML文档
soup = BeautifulSoup(html, 'html.parser')
# 获取所有标签内的文本
text = soup.get_text()
# 获取特定标签内的文本(例如p标签)
p_text = soup.find('p').get_text()
from lxml import etree
# 假设html为包含标签的HTML文档
tree = etree.HTML(html)
# 获取所有标签内的文本
text = tree.xpath('//text()')
# 获取特定标签内的文本(例如p标签)
p_text = tree.xpath('//p/text()')
import re
# 假设html为包含标签的HTML文档
pattern = re.compile('<[^>]*>')
text = re.sub(pattern, '', html)
这些方法可以根据你的需求选择其中之一,它们都可以帮助你提取出HTML标签里面的文本内容。请注意,这些方法在处理复杂的HTML文档时可能会有一些限制,因此建议使用专门的HTML解析库(如BeautifulSoup、lxml)来处理HTML文档以获得更好的灵活性和准确性。
import json
# 假设你已经获取到了 JSON 数据,将其存储在 json_data 变量中
json_data = '''
{
"status": 200,
"message": "success",
"datatype": "json",
"data": {
"pageArticleList": [
{
"indexnum": 0,
"periodid": 20200651,
"ordinate": "",
"pageid": 2020035375,
"pagenum": "6 科协动态",
"title": "聚焦“科技创新+先进制造” 构建社会化大科普工作格局"
}
]
}
}
'''
# 解析 JSON 数据
data = json.loads(json_data)
# 提取 title 属性的值
title = data["data"]["pageArticleList"][0]["title"]
# 输出 title 属性的值
print(title)
在上述示例中,我们将示例数据存储在 json_data 字符串中。然后,我们使用 json.loads() 函数将字符串解析为 JSON 数据,将其存储在 data 变量中。
然后,我们可以通过字典键的层级访问方式提取 title 属性的值。在这个示例中,我们使用 data[“data”][“pageArticleList”][0][“title”] 来获取 title 属性的值。
最后,我们将结果打印出来或根据需求进行其他处理。
或者是用get()获取具体属性的值
list = json.loads(res.text)
for i in list:
print(i.get('edition'))
import requests
url = "https://example.com"
headers = {
"User-Agent": "Mozilla/5.0",
"Accept-Language": "en-US,en;q=0.9",
"Referer": "https://example.com",
# 添加其他常用请求头...
}
response = requests.get(url,stream=True, headers=headers)
try:
html = ""
<html>
<body>
</body>
</html>
""
soup = BeautifulSoup(html, 'html.parser')
# 创建新的div标签
new_div = soup.new_tag('div')
temp_part1 = html_dom.find('div', 'detail-title')
new_div.append(temp_part1)
temp_part2 = html_dom.find("div", "detail-article")
new_div.append(temp_part2)
card = {"content": "", "htmlContent": ""}
html_dom=new_div
except:
return
from bs4 import BeautifulSoup
# 假设你已经获取到了 DOM 结构,将其存储在 dom 变量中
dom = '''
<div class="container">
<h1>Hello, World!</h1>
<p>This is a paragraph.</p>
</div>
'''
# 创建 Beautiful Soup 对象
soup = BeautifulSoup(dom, 'html.parser')
# 找到要删除的部分
div_element = soup.find('div', class_='container')
div_element.extract()
# 输出修改后的 DOM 结构
print(soup.prettify())
在实际应用中,需要根据要删除的部分的选择器和属性进行适当的调整。
from bs4 import BeautifulSoup
# 假设html为包含标签的HTML文档
soup = BeautifulSoup(html, 'html.parser')
# 查找所有div标签并获取其文本内容
div_texts = [div.get_text() for div in soup.find_all('div')]
from lxml import etree
# 假设html为包含标签的HTML文档
tree = etree.HTML(html)
# 使用XPath查找所有div标签并获取其文本内容
div_texts = tree.xpath('//div//text()')
在Python爬虫中,你可以通过以下几种方法来改变响应文本的字符集编码:
方式一:使用response.encoding属性:当使用requests库发送请求并获取到响应对象后,可以通过response.encoding属性来指定响应文本的字符集编码。根据响应中的内容,可以尝试不同的编码进行设置,例如UTF-8、GBK等。示例代码如下:
import requests
response = requests.get('https://example.com')
response.encoding = 'UTF-8' # 设置响应文本的字符集编码为UTF-8
print(response.text)
apparent_encoding用于获取响应内容的推测字符集编码,是一个只读属性,它只返回推测的字符集编码,并不能用于设置或更改字符集编码。如果需要更改字符集编码,请使用response.encoding属性进行设置
import requests
import chardet
response = requests.get('https://example.com')
encoding = chardet.detect(response.content)['encoding'] # 检测响应文本的字符集编码
response.encoding = encoding # 设置响应文本的字符集编码
print(response.text)
import requests
response = requests.get('https://example.com')
text = response.content.decode('unicode-escape')
print(text)
字符集转码是指将文本从一种字符集编码转换为另一种字符集编码的过程。在Python中,可以使用**encode()和decode()**方法进行字符集转码操作。
方式一: encode(encoding) 将文本从当前字符集编码转换为指定的编码。其中,encoding参数是目标编码格式的字符串表示。示例代码如下:
text = "你好"
encoded_text = text.encode('utf-8') # 将文本从当前编码转换为UTF-8编码
print(encoded_text)
encoded_text = b'\xe4\xbd\xa0\xe5\xa5\xbd' # UTF-8 编码的字节串
decoded_text = encoded_text.decode('utf-8') # 将字节串从UTF-8解码为Unicode文本
print(decoded_text)
在许多编程语言的HTTP请求库中,比如Python的requests库,有两个常用的属性用于获取HTTP响应的内容:response.text和response.content。区别如下:
1. response.text返回的是一个字符串,表示HTTP响应的内容。
2. 这个字符串是根据HTTP响应的字符编码来解码的,默认使用UTF-8编码。
3. 如果响应中包含了其他编码的内容,那么可以通过指定response.encoding属性来手动指定相应的编码方式进行解码。
1. response.content返回的是一个字节流,表示HTTP响应的内容。
2. 这个字节流是原始的二进制数据,没有进行任何编码解码操作。
3. response.content适用于处理二进制文件,比如图片、音视频文件等。
简而言之,response.text适用于处理文本内容,会自动进行编码解码操作,而response.content适用于处理二进制内容,返回的是原始字节流。
使用哪个属性取决于你处理的内容类型和需求。如果你处理的是文本内容,比如HTML、JSON数据等,那么通常使用response.text。如果你处理的是二进制文件,比如图像或音视频文件,那么使用response.content更合适。
解析一个请求主要关注以下几个方面
以下是一个示例代码
import json
import requests
def main():
url = 'https://www.gzyouthnews.org.cn/index/index'
header = {
'X-Requested-With':'XMLHttpRequest'
}
data={
'act':'list',
'date':'2023-08-10',
'paper_id':1
}
res = requests.post(url=url,headers=header,data=data)
list = json.loads(res.text)
for i in list:
print(i.get('edition'))
if __name__ == '__main__':
main()
要从给定的 URL 中获取参数 page=100,你可以使用 URL 解析库来解析 URL,并提取出所需的参数。
以下是使用 Python 的 urllib.parse 模块解析 URL 参数的示例代码:
from urllib.parse import urlparse, parse_qs
url = "https://blog.csdn.net/phoenix/web/v1/comment/list/131760390?page=100&size=10&fold=unfold&commentId="
parsed_url = urlparse(url)
query_params = parse_qs(parsed_url.query)
page_value = query_params.get("page", [None])[0]
print(page_value)
在上述示例中,我们首先使用 urlparse 函数解析 URL,然后使用 parse_qs 函数解析查询参数部分。parse_qs 函数将查询参数解析为字典,其中键是参数名称,值是参数值的列表。
然后,我们使用 query_params.get(“page”, [None])[0] 从字典中获取名为 page 的参数值。这将返回参数的值,如果该参数不存在,则返回 None。
输出结果将是 100,这是从 URL https://blog.csdn.net/phoenix/web/v1/comment/list/131760390?page=100&size=10&fold=unfold&commentId= 中提取的 page 参数的值。
请注意,如果 URL 的参数值是字符串形式,你可能需要根据需要进行进一步的类型转换。
欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)
原文链接:https://blog.csdn.net/HHX_01/article/details/132554920
作者:怪兽爸爸
链接:https://www.pythonheidong.com/blog/article/2026450/84329bb26aac85cdb50b/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!