python如何获取网络数据


Posted in Python onApril 11, 2021

Retrieving Data over HTTP

Python 内置了 sockets 可以实现与网络连接并通过 Python 提取数据的功能。

socket 是可以提供双向连接的,我们可以对同一个 socket 进行读写操作。比方说,A 对 socket 写入信息,并且将其发送给 socket 连接另一端 B;那么 B 读取 socket 的内容就可以得到 A 的信息。但是这样会有一个问题,比如说, A端并没有发送任何信息,而 B 端一直在尝试读取 socket 的内容,那么 A 端和 B 端只能陷入漫长的等待。所以就引入了通信协议。协议通过规定谁先发送,谁后响应等来规避上述的问题。

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('fakeserver.com', 80)) # connect to server
cmd = 'GET http://fakeserver.com/fake.txt HTTP/1.0\r\n\r\n'.encode()
# send GET command followed by a blank line
mysock.send(cmd) 

while True: # receive data and print out
    data = mysock.recv(512)
    if (len(data) < 1):
        break
    print(data.decode())
mysock.close()

Retrieving Data with urllib

利用 socket 我们可以与网站服务器,邮件服务器等建立连接。但是在建立连接之前,我们需要查询文档了解通信协议,然后根据协议编写程序。所以相较于 socket 这种黑魔法,我们可以利用更为简单的 Python Package。

利用 urllib.urlopen() 打开网页后,我们就可以读取数据,像读取本地文件一样。

import urllib.request

fhand = urllib.request.urlopen('http://fakeserver.com/fake.txt')
for line in fhand:
    #convert UTF-8 to unicode string and print out
    print(line.decode().strip())

因为 urllib 使用简洁方便,所以也常用与网络爬虫。网络爬虫除了要网页读取数据以外还需要在 HTML 格式中解释出可用数据,所以除了 urllib 还有另一常用利器就是 BeautifulSoup

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

html = urllib.request.urlopen('http://fakeserver.com/fake.html', context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
tags = soup('a')
# Retrieve all of the anchor tags
for tag in tags:
    print(tag.get('href', None))

Retrieving Data from XML

在网络交换数据,我们常用的格式有两种,一是 XML; 二是 JSON。

XML 长得就像是 HTML 的近亲,可以看做是树的一种。利用 Python Package ElementTree 我们可以将 XML 文件转换为树,这样可以方便我们后续提取有效的数据。

import xml.etree.ElementTree as ET
data =  '''
            <person>
            <name>Jack</name>
            <phone>+123456789</phone>
            <email office="yes"/>
            </person> 
        '''
tree = ET.fromstring(data) # convert xml into a tree
print('Name:', tree.find('name').text)
print('Attr:', tree.find('email').get('office'))

Retrieving Data from JSON

JSON 结构相较于 XML 来说更为简单,所以他的功能就没有那么强大。但是 JSON 有一个优势就是可以直接映射到 Python 的 dictionaries 和 lists 中,非常实用。

我们可以直接利用 Python Package json 来解释 JSON。

import json
data =  '''
            {
                "name" : "Jack",
                "phone" : {
                    "type" : "intl",
                    "number" : "+123456789"
                },
                "email" : {
                    "office" : "yes"
                }
            }
        '''
info = json.loads(data)  # convert json into a dictianary
print('Name:', info['name'])
print('Attr:', info['email']['office'])

作者:Yuki
出处:https://www.cnblogs.com/yukiwu/

以上就是python如何获取网络数据的详细内容,更多关于python获取网络数据的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
Python求一批字符串的最长公共前缀算法示例
Mar 02 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
Django中信号signals的简单使用方法
Jul 04 Python
Python 占位符的使用方法详解
Jul 10 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
Python 实现自动导入缺失的库
Oct 29 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
Python collections.deque双边队列原理详解
Oct 05 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
Pytorch 使用tensor特定条件判断索引
selenium.webdriver中add_argument方法常用参数表
Apr 08 #Python
python3使用diagrams绘制架构图的步骤
python实现求纯色彩图像的边框
python爬取企查查企业信息之selenium自动模拟登录企查查
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 #Python
Django 如何实现文件上传下载
Apr 08 #Python
You might like
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
thinkphp实现发送邮件密码找回功能实例
2014/12/01 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
浅谈django model postgres的json字段编码问题
2018/01/05 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
python处理excel绘制雷达图
2019/10/18 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
超市营业员岗位职责
2013/12/20 职场文书
干部个人对照检查材料
2014/08/25 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
python Tkinter模块使用方法详解
2022/04/07 Python
CentOS安装Nginx并部署vue
2022/04/12 Servers