日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python(数据分析与可视化)二

發(fā)布時(shí)間:2024/1/1 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python(数据分析与可视化)二 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python(數(shù)據(jù)分析與可視化)二

爬取網(wǎng)頁(yè)內(nèi)容的前期技術(shù)儲(chǔ)備

1.pip包管理

(1)內(nèi)置庫(kù)

包/庫(kù):別人寫(xiě)好的代碼,直接引用,加快開(kāi)發(fā)效率。
內(nèi)置包:python解釋器內(nèi)置常用功能庫(kù)。
– 解釋器安裝目錄/Lib文件夾下, os time urllib等
– 文件夾里有__init__.py 就成了一個(gè)包。

... import urllib from urllib import request response = request.urlopen('http://baidu.com') ...

(2)關(guān)于HTTP模擬和HTML源代碼解析

python時(shí)代: urllib urllib2
由第三方程序員做了一個(gè)新http請(qǐng)求庫(kù),比官方更方便,urllib3
又有一個(gè)程序員,在urllib3基礎(chǔ)上進(jìn)一步封裝和優(yōu)化,requests
python3時(shí)代 內(nèi)置庫(kù)統(tǒng)一為urllib
結(jié)論:建議直接使用requests

(3)第三方庫(kù)

pypi.org 上豐富的各種功能的庫(kù)

①pip包管理工具

在服務(wù)器上沒(méi)有圖形界面的瀏覽器.開(kāi)發(fā)語(yǔ)言第三方庫(kù)往往用命令行包管理工具
解釋器/script/pip.exe

pip -V # 看Pip版本 pip search requests #搜索包信息 pip install requests #安裝第三方庫(kù) pip uninstall requests #卸載 pip list #展示所有已經(jīng)安裝過(guò)的庫(kù) pip freeze > requirements.txt #把項(xiàng)目用到的庫(kù)信息導(dǎo)出到一個(gè)文件中

第三方庫(kù)安裝的位置: 解釋器目錄\lib\site-packages\

②換源

軟件源source: 清單里維護(hù)了上萬(wàn)的 某某軟件-> 某某url下載 庫(kù)下載地址關(guān)系,但官方pypi.org下載速度慢,國(guó)內(nèi)一些大學(xué)、大公司同步鏡像
方法一:臨時(shí)換源
‘pip install requests -i http://simply.aliyun.com/simply/’
方法二:永久換
系統(tǒng)用戶(hù)文件夾下新建.pip文件夾和pip.conf文件,寫(xiě)入配置

方式三(推薦):pycharm設(shè)置里面配settings/interpreter/+號(hào)/manage repositories/+號(hào) 復(fù)制源(推薦阿里云)

參考[pip換源](https://www.cnblogs.com/believepd/p/10499844.html)
豆瓣 https://pypi.doubanio.com/simple/
阿里云 https://mirrors.aliyun.com/pypi/simple/
清華大學(xué) https://pypi.tuna.tsinghua.edu.cn/simple/

2.requests基本用法

requests 是用Python語(yǔ)言編寫(xiě),基于 urllib,采用 Apache2 Licensed 開(kāi)源協(xié)議的 HTTP 庫(kù)。它比 urllib 更加方便,可以節(jié)約我們大量的工作,完全滿(mǎn)足 HTTP 測(cè)試需求。Requests 的哲學(xué)是以 PEP 20 的習(xí)語(yǔ)為中心開(kāi)發(fā)的,所以它比 urllib 更加 Pythoner。下面我以代碼的形式簡(jiǎn)單寫(xiě)其中常用的幾個(gè)知識(shí)點(diǎn):

import requestsbaidu_index_url = 'https://baidu.com' baidu_search_url = 'http://baidu.com/s'#仿造請(qǐng)求頭,基本反爬蟲(chóng)措施 headers = {#'cookies':'', #跟公共參數(shù)、用戶(hù)會(huì)話有關(guān)#'refer':'', #從哪個(gè)頁(yè)面來(lái)#瀏覽器標(biāo)識(shí),容易偽造,但肯定是機(jī)器人,容易被服務(wù)器識(shí)別出來(lái)'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36' }params = {'wd':'天氣','ie':'utf-8' }response = requests.get(url=baidu_search_url,params=params) #狀態(tài)碼 status_code = response.status_code if status_code == 200:#網(wǎng)頁(yè)數(shù)據(jù) bytescontent = response.content#網(wǎng)頁(yè)數(shù)據(jù)str 一般直接取得text屬性,但少數(shù)情況解碼錯(cuò)誤出現(xiàn)亂碼text = response.texttext = content.decode('utf-8') #只有百度需要()特殊print(text)url = response.urlheaders = response.headers

3.debug模式

debug模式也就是調(diào)試運(yùn)行模式
具體操作過(guò)程可以分為三步:
1.打斷點(diǎn)
2.以debug運(yùn)行
3.F8向下執(zhí)行單步,觀察變量值

import requestsresponse = requests.get(url='https://baidu.com', ) # 狀態(tài)碼 status_code = response.status_code if status_code == 200:# 網(wǎng)頁(yè)數(shù)據(jù) bytescontent = response.content# 網(wǎng)頁(yè)數(shù)據(jù)str 一般直接取得text屬性,但少數(shù)情況解碼錯(cuò)誤出現(xiàn)亂碼text = response.texttext = content.decode('utf-8')print(text)url = response.urlheaders = response.headersfor i in range(10):print(i)j = ij+=1print(1)

4.html解析—正則

①我們已經(jīng)用requests模擬請(qǐng)求,拿到網(wǎng)頁(yè)源代碼,str字符串,里面HTML模式
#需要分析
字符串自帶的find方法功能有限,如下:

html = '<html><body><h1>標(biāo)題</h1></body></html>' start_index = html.find('<h1>') end_index = html.find('</h1>') print(html[start_index:end_index])

因此有三種解析方法:
解析方式一:正則 regex,專(zhuān)門(mén)針對(duì)字符串處理的語(yǔ)法
(不推薦,了解即可)

import re text1 = 'ilikepythonbutyouarebeautiful' pattern1 = re.compile(r'python') matcher1 = re.search(pattern1,text1) print(matcher1[0])text2 = '<h1>i like world</h1>' pattern2 = re.compile(r'<h1>.+</h1>') # . 表示一個(gè)字符 matcher2 = re.search(pattern2,text2) print(matcher2[0])text3 = 'beautiful' text4 = 'you are a good boy' text5 = '13243454454@qq.com' #注冊(cè)驗(yàn)證郵箱#手冊(cè) https://tool.oschina.net/uploads/apidocs/jquery/regexp.html #常用正則 https://www.cnblogs.com/qq364735538/p/11099572.htmltext6 = """ <html> aaacc<h1>adsd sss </h1> aaaa </html> """ pattern10 = re.compile(r'<h1>(.*?)</h1>',re.S) print(pattern10.findall(text6))#把網(wǎng)頁(yè)上HTML目標(biāo)區(qū)域標(biāo)簽復(fù)制到上述代碼中,像抓取的信息用(.*?)代替

5.html解析—bs庫(kù)(不推薦,了解即可)

#網(wǎng)頁(yè)HTML本身就是樹(shù)狀層狀結(jié)構(gòu),按照層次去找
#beautiful-soup庫(kù) 是python2時(shí)代的庫(kù),
#適合python3的是beautifulsoup4
#用’pip install beautifulsoup4‘來(lái)安裝第三方庫(kù)

from bs4 import BeautifulSoup #小坑:代碼包名和包原信息名字不一致html = """ <html><body><a id='xxx' href="https://baidu.com">百度一下</a><a></a></body> </html> """#先把字符串解析成html結(jié)構(gòu),內(nèi)置庫(kù)html.parser 或者第三方庫(kù)lxml bs = BeautifulSoup(html,'html.parser') #或者第二個(gè)參數(shù)填入“l(fā)xml” print(bs.a) print(bs.find_all('a')) print(bs.a['href']) print(bs.a) #獲取父、子標(biāo)簽#總結(jié):bs邏輯直觀簡(jiǎn)單,但代碼較多

6.html解析—xpath

#xpath表達(dá)式有自己的語(yǔ)法,但沒(méi)有正則那么復(fù)雜,類(lèi)似bs4庫(kù)按照html層級(jí)查找
#用’pip install lxml‘來(lái)進(jìn)行第三方庫(kù)的安裝

from lxml import etreehtml = """ <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" /><title>lxml中xpath的用法</title> </head> <body><ul><li><a href="https://www.baidu.com" class="first_a">百度一下</a></li><li><a href="https://mail.qq.com" id="second_a">QQ郵箱</a></li><li><a href="https://www.taobao.com">淘寶網(wǎng)</a></li><li><a href="https://pypi.python.org" class="first_a">Python官網(wǎng)</a><a href="https://pypi.python.org" class="second_a">Python</a></li></ul><p class="one">first_p_tag</p><p id="second">second_p_tag</p><div class="one">first_div_tag<p class="first second third">11111111</p><a href="#">22222222</a></div> </body> </html> """#把長(zhǎng)字符串轉(zhuǎn)換成html文檔樹(shù) dom = etree.HTML(html) print(dom)#默認(rèn)情況下都是全文匹配,匹配不到返回空列表,匹配到的【element,element】 # "/"表示往下一層 “//”表示忽略任意層父級(jí)目錄 dom.xpath('//a') #取html元素里的屬性 # "/@href"取元素屬性值 dom.xpath('//a/@href') #取標(biāo)簽里面的內(nèi)容 -> "/text()" print(dom.xpath('//a/text()')) # 屬性過(guò)濾 print(dom.xpath('//a[@id="second_a"]/text()')[0]) 比較正則xpathbs
難度簡(jiǎn)單
代碼量
可讀性

今天的分享就到這里,如果還想了解更多,可以看我主頁(yè)!

總結(jié)

以上是生活随笔為你收集整理的python(数据分析与可视化)二的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。