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实现带百分比的进度条
Jun 28 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
python pycharm的安装及其使用
Oct 11 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
python 对xml解析的示例
Feb 27 Python
解决python 输出到csv 出现多空行的情况
Mar 24 Python
python读取pdf格式文档的实现代码
Apr 01 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
javascript 函数调用规则
2009/08/26 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python实现的Kmeans++算法实例
2014/04/26 Python
Python算法之栈(stack)的实现
2014/08/18 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
Python列表与元组的异同详解
2019/07/02 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
python入门教程之基本算术运算符
2020/11/13 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
西式结婚主持词
2014/03/14 职场文书
品牌推广策划方案
2014/05/28 职场文书
教师职位说明书
2014/07/29 职场文书
回门宴新娘答谢词
2015/09/29 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL