文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python萌新爬虫学习笔记【建议收藏】

2023-09-20 09:00

关注

文章目录

1. 如何何请求解析url

  1. BeautifulSoup 是一个 Python 库,用于网络爬虫目的。它提供了一种方便和高效的方式来从 HTML 和 XML 文档中提取数据。使用 BeautifulSoup,你可以解析和遍历 HTML 结构,搜索特定元素,并从网页中提取相关数据。
  1. 该库支持不同的解析器,如内置的 Python 解析器、lxml 和 html5lib,允许你根据特定需求选择最适合的解析器。BeautifulSoup 的优势在于它能够处理格式混乱或损坏的 HTML 代码,使其成为处理复杂情况下的网络爬虫任务的强大工具。
import requestsfrom bs4 import BeautifulSoup# 发送请求获取 HTMLresponse = requests.get(url)html = response.text# 创建 Beautiful Soup 对象soup = BeautifulSoup(html, 'html.parser')# 通过选择器选择 DOM 元素进行操作element = soup.select('#my-element')
import requestsfrom lxml import etree# 发送请求获取 HTMLresponse = requests.get(url)html = response.text# 创建 lxml HTML 解析器对象parser = etree.HTMLParser()# 解析 HTMLtree = etree.fromstring(html, parser)# 通过XPath选择 DOM 元素进行操作elements = tree.xpath('//div[@class="my-element"]')

2. 如何获取标签里面的文本

在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文档以获得更好的灵活性和准确性。

3. 如何解析JSON格式

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)
list = json.loads(res.text)    for i in list:        print(i.get('edition'))

在这里插入图片描述

4. 如何添加常用的header

import requestsurl = "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)

5. 如何合并两个div

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_divexcept:  return

6. 如何删除html dom的部分结构

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())

7. 如何一次性获取所有div标签里的文本

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()')

8. python爬虫如何改变响应文本字符集编码

import requestsresponse = requests.get('https://example.com')response.encoding = 'UTF-8'  # 设置响应文本的字符集编码为UTF-8print(response.text)

apparent_encoding用于获取响应内容的推测字符集编码,是一个只读属性,它只返回推测的字符集编码,并不能用于设置或更改字符集编码。如果需要更改字符集编码,请使用response.encoding属性进行设置

import requestsimport chardetresponse = requests.get('https://example.com')encoding = chardet.detect(response.content)['encoding']  # 检测响应文本的字符集编码response.encoding = encoding  # 设置响应文本的字符集编码print(response.text)
import requestsresponse = requests.get('https://example.com')text = response.content.decode('unicode-escape')print(text)

9. 如何进行字符集转码

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)

11. response.text 和 respone.content的区别

在许多编程语言的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更合适。

12. 如何发送post请求访问页面

解析一个请求主要关注以下几个方面

在这里插入图片描述

以下是一个示例代码

import jsonimport requestsdef 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()

13. 如何获取 url 中的参数

要从给定的 URL 中获取参数 page=100,你可以使用 URL 解析库来解析 URL,并提取出所需的参数。
以下是使用 Python 的 urllib.parse 模块解析 URL 参数的示例代码:

from urllib.parse import urlparse, parse_qsurl = "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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯