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 相关文章推荐
最大K个数问题的Python版解法总结
Jun 16 Python
Python选课系统开发程序
Sep 02 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
Python中的枚举类型示例介绍
Jan 09 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
在django中自定义字段Field详解
Dec 03 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
Python Django获取URL中的数据详解
Nov 01 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Python安装第三方库的3种方法
2015/06/21 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
韩国现代百货官网:Hmall
2018/03/21 全球购物
Weblogic的布署方式
2013/08/23 面试题
《第一朵杏花》教学反思
2014/04/16 职场文书
党的生日演讲稿
2014/09/10 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
公证处委托书
2015/01/28 职场文书
军事理论课感想
2015/08/11 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang