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 NumPy库安装使用笔记
May 18 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
python实现Floyd算法
Jan 03 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
Python进阶之自定义对象实现切片功能
Jan 07 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
python3正则模块re的使用方法详解
Feb 11 Python
Python数据结构之队列详解
Mar 21 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仿盗链代码
2012/06/03 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
web性能优化之javascript性能调优
2012/12/28 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
vue.js中created方法作用
2018/03/30 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
python使用Matplotlib画条形图
2020/03/25 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
python中温度单位转换的实例方法
2020/12/27 Python
实习生自荐信范文
2013/11/13 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
年度考核自我鉴定
2014/02/02 职场文书
班训口号大全
2014/06/18 职场文书
大学生助学金感谢信
2015/01/21 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
Python实现简单得递归下降Parser
2022/05/02 Python