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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
python中ConfigParse模块的用法
Sep 29 Python
Python编程实现的图片识别功能示例
Aug 03 Python
深入了解Python中pop和remove的使用方法
Jan 09 Python
Python3 中文文件读写方法
Jan 23 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python 公共方法汇总解析
Sep 16 Python
举例讲解Python装饰器
Dec 24 Python
Python快速实现一键抠图功能的全过程
Jun 29 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
一些星际专用术语解释
2020/03/04 星际争霸
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python实现二叉搜索树
2016/02/03 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Python实现结构体代码实例
2020/02/10 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
英文求职信写作小建议
2014/02/16 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书