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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
跟老齐学Python之开始真正编程
Sep 12 Python
跟老齐学Python之关于循环的小伎俩
Oct 02 Python
python轻松实现代码编码格式转换
Mar 26 Python
利用numpy和pandas处理csv文件中的时间方法
Apr 19 Python
python 从csv读数据到mysql的实例
Jun 21 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
pycharm的python_stubs问题
Apr 08 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
python实现暗通道去雾算法的示例
Sep 27 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
微信小程序 传值取值的几种方法总结
2017/01/16 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python中的一些类型转换函数小结
2013/02/10 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
Python中itertools的用法详解
2020/02/07 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
教师新年寄语
2014/04/03 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2014年营业员工作总结
2014/11/18 职场文书
公司市场部岗位职责
2015/04/15 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书