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 pass 语句使用示例
Mar 11 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
Python如何对XML 解析
Jun 28 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
python 写一个文件分发小程序
Dec 05 Python
python 装饰器的基本使用
Jan 13 Python
Django+Django-Celery+Celery的整合实战
Jan 20 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
php程序内部post数据的方法
2015/03/31 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
node.js爬虫框架node-crawler初体验
2020/10/29 Javascript
python 正则式使用心得
2009/05/07 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
Python元字符的用法实例解析
2018/01/17 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
公司同意接收函
2014/01/13 职场文书
求职意向书范文
2014/04/01 职场文书
骨干教师考核方案
2014/05/09 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
个人作风建设自查报告
2014/10/22 职场文书
沈阳故宫导游词
2015/01/31 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python
为Centos安装指定版本的Docker
2022/04/01 Servers