socket网络通信对象、属性、使用方法

Python 中常用的网络通信对象是 socket,它包含以下属性和方法:

属性:

  • SOCK_STREAM: 表示使用TCP协议进行传输。
  • SOCK_DGRAM: 表示使用UDP协议进行传输。
  • AF_INET: 表示使用IPv4协议。
  • AF_INET6: 表示使用IPv6协议。
  • SO_REUSEADDR: 表示地址复用,即在同一台机器上,相同的IP和端口号可以被多个进程共用。

方法:

  • socket(): 创建一个新的socket对象。
  • bind(address): 将socket绑定到一个地址和端口上。
  • listen(backlog): 开始监听传入连接请求,backlog指定未处理的最大连接数。
  • accept(): 接受连接请求,并返回一个新的socket对象和客户端地址。
  • connect(address): 连接到指定的地址和端口。
  • send(bytes): 发送数据,返回实际发送的字节数。
  • recv(bufsize): 接收数据,返回实际接收到的字节数。
  • close(): 关闭socket连接。

下面是一个简单的例子,展示如何使用socket进行TCP通信:

# 创建一个socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到指定的地址和端口
s.bind(('localhost', 8888))

# 开始监听传入连接请求
s.listen(1)

# 接受连接请求,并返回一个新的socket对象和客户端地址
conn, addr = s.accept()

# 接收客户端发送的数据
data = conn.recv(1024)

# 发送数据到客户端
conn.send(b'Received: ' + data)

# 关闭socket连接
conn.close()
s.close()

在上面的例子中,我们创建了一个socket对象并将其绑定到本地主机的端口8888上。然后我们使用listen()方法开始监听传入连接请求,并使用accept()方法接受客户端连接。一旦连接建立,我们使用recv()方法接收客户端发送的数据,并使用send()方法将处理后的数据发送回客户端。最后,我们关闭socket连接。

chardet获取到编码后,再转换为 `str`,就可以方便后续处理。

```python
import requests

url = 'https://baike.baidu.com'

\# 生成GET请求

rqg = requests.get(url)

print("结果类型:", type(rqg))     # 查看结果类型

print("状态码:", rqg.status_code)   # 查看状态码

print("编码:", rqg.encoding)   # 查看编码

print("响应头:", rqg.headers)    # 查看响应头





url = 'https://baike.baidu.com'

rqg = requests.get(url)

print("状态码:", rqg.status_code)  # 查看状态码

print("编码:", rqg.encoding)   # 查看编码

rqg.encoding  = 'UTF-8'  # 手动指定编码

print("修改后的编码:", rqg.encoding)   # 查看修改后的编码

列出网页中解析中用到的对象及用法

网页解析通常需要使用以下对象:

  1. HTML文档对象(Document Object Model,DOM):表示整个HTML文档的层次结构。通过DOM可以访问和操作HTML文档中的元素、属性和文本信息。
  2. 标签元素对象:代表网页中的HTML标签元素,如<div>、<p>、<a>等。可以通过获取标签元素对象来读取或修改HTML标签元素中的内容、属性和样式等信息。
  3. 节点对象:表示DOM树中的一个节点,包括元素节点、属性节点、文本节点、注释节点等。可以通过节点对象获取其子节点、父节点、兄弟节点等信息,从而实现对HTML文档的逐层遍历和解析。
  4. CSS样式对象:用于描述HTML元素的样式信息,如字体、颜色、背景等。可以通过CSS样式对象获取或设置HTML元素的样式属性。
  5. XMLHTTPRequest对象:用于向Web服务器发送HTTP请求并接收响应。通过XMLHTTPRequest对象可以实现异步获取HTML页面的内容,从而实现动态页面的更新和数据交互。
  6. 正则表达式对象:用于匹配和查找HTML文本中的特定模式。正则表达式对象可以帮助程序员快速地提取HTML文本中的关键信息,如URL、电子邮件地址、电话号码等。

在Web开发过程中,这些对象通常与JavaScript编程语言一起使用,以实现网页的解析、渲染和交互等功能。

图片采集步骤

import requests
import time
from lxml import etree
url='http://desk.zol.com.cn/dongman/1920x1080/'
headers={"Referer":"Referer:http://desk.zol.com.cn/dongman/1920x1080/",
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/65.0.3325.181'
}
resq=requests.get(url,headers=headers)
print(resq)
html=etree.HTML(resq.text)
srcs=html.xpath(".//img/@src")
for i in srcs:
    imgname=i.split('/')[-1]
    img=requests.get(i,headers=headers)
with open('demo/'+imgname,'wb')as file:
        file.write(img.content)
print(i,imgname)
  1. 确定采集目标:首先需要明确要采集哪些类型的图片资源,例如照片、插图、图标等。同时也需要确定采集的范围和深度,以及可能存在的限制和障碍,如反爬虫机制、版权保护等。
  2. 确定采集工具:根据采集目标的不同,可以选择使用不同的采集工具,如网络爬虫、数据挖掘软件、API接口等。同时也需要考虑采集工具的性能、可靠性和易用性等因素。
  3. 配置采集参数:根据采集目标和工具的特点,需要配置一些参数和选项,如起始URL、关键词、过滤规则、并发线程数等。这些参数和选项会直接影响到采集效果和速度。
  4. 启动采集任务:在完成上述准备工作后,可以启动采集任务,让采集工具开始自动地下载和保存图片资源。需要注意的是,在采集过程中可能会遇到各种问题,如链接超时、服务器拒绝访问等,需要及时处理和调整。
  5. 整理和存储采集结果:在采集结束后,需要整理和归档采集结果,包括删除重复或无用的图片资源,对文件名和格式进行统一规划,为每个图片资源添加相关的元信息等。同时也需要选择合适的存储方式,如本地硬盘、云存储等,以便于后续的管理和使用。

通过本次实践,我了解了网页的组成结构和网页采集和解析的方法。在实践过程中,我发现使用网络通信对象和解析对象需要灵活掌握各种方法和属性,同时也需要注意一些细节和注意事项,如编码问题、防止反爬虫等。在图片资源采集过程中,我遇到的主要问题是如何快速且有效地获取大量的图片资源,并保证数据的质量和完整性。通过不断地尝试和优化,我最终成功地采集了一批高质量的图片资源,并将其整理和存储在本地。