Python網路資料採集6 讀取文件

2021-08-14 04:15:25 字數 3846 閱讀 3658

6.1 文件編碼

檔案格式

6.2 純文字

from urllib.request import urlopen

textpage = urlopen("")

print(textpage.read())

在utf8設計過程中,設計師決定利用ascii文件裡的「填充位」,讓所有以「0」開頭的位元組表示這個字元只用1個位元組,從而把ascii和utf-8編碼完美地結合在一起。

乙個常見的誤解是utf-8把所有字元都儲存成8位。其實「8位「只是顯示乙個字元需要的最小位數,而不是最大位數,乙個字元最多可以是四個字元。

除了utf-8,還有utf-16、utf-24、utf-32,不過很少用這些編碼標準對檔案進行編碼。

顯然,unicode標準也有問題,就是任何一種非英文語言文件的體積都比ascii編碼的體積大。

iso標準解決這個問題的辦法是為每種語言建立一種編碼。目前仍有約9%的**使用iso編碼,所以有必要做基本的了解,並在採集**之前需要檢查是否使用了這種編碼方法。

python預設把文字讀成ascii編碼格式,而瀏覽器把文字讀成iso-8859-1編碼格式。

print(str(textpage.read(), 'utf-8'))

6.3 csv

讀取csv檔案:python的csv庫主要是面向本地檔案。

from urllib.request import urlopen

from io import stringio

import csv

data = urlopen("").read().decode('ascii', 'ignore')

datafile = stringio(data)

csvreader = csv.reader(datafile)

for row in csvreader:

print(row)

dictreader = csv.dictreader(datafile)

print(dictreader.fieldnames)

6.4 pdf

adobe在2023年發明pdf格式(portable document format,可攜式文件格式)是一種技術革命。pdf可以讓使用者在不同的系統上用同樣的方式檢視和文字文件,無論這些檔案是在哪種系統上製作的。

雖然把pdf顯示在網頁上已經有點兒過時了(你已經可以把內容顯示成html了,為什麼還要用這種靜態、載入速度超慢的格式呢?),但是pdf仍然無處不在,尤其是在處理商務報表和表單的時候。

不過目前很多pdf解析庫都是用python 2.x版本建立的,還沒有遷移到python 3.x版本。但是,因為pdf比較簡單,而且是開源的文件格式,所以有一些給力的python庫可以讀取pdf檔案,而且支援python 3.x版本。

pdfminer3k就是乙個非常好用的庫。

pip install pdfminer   

from urllib.request import urlopen

from pdfminer.pdfinterp import pdfresourcemanager, process_pdf

from pdfminer.converter import textconverter

from pdfminer.layout import laparams

from io import stringio

from io import open

def readpdf(pdffile):

rsrcmgr = pdfresourcemanager()

retstr = stringio()

laparams = laparams()

device = textconverter(rsrcmgr, retstr, laparams=laparams)

process_pdf(rsrcmgr, device, pdffile)

device.close()

content = retstr.getvalue()

retstr.close()

return content

pdffile = urlopen("")

outputstring = readpdf(pdffile)

print(outputstring)

pdffile.close()

6.5 微軟word和.docx

word檔案從未打算讓人頻繁傳遞。不過它們在一些**上很流行,包括重要的文件、資訊,甚至圖表和多**;總之,那些內容都應該用html代替。

大約在2023年以前,.doc檔案格式。這種二進位制格式很難讀取,而且能夠讀取word格式的軟體很少。為了跟上時代,微軟決定使用open office類的xml格式標準,此後新版word檔案才與其他文字處理軟體相容,這個格式就是.docx

不過python對這種.docx格式的支援還不夠好。雖然有python-docx庫,不支援正文讀取。我們需要自己動手找方法。

# -*- coding: utf-8 -*-

from zipfile import zipfile

from urllib.request import urlopen

from io import bytesio

# 第一步是從檔案讀取xml

wordfile = urlopen("").read()

wordfile = bytesio(wordfile)

# 這段**把乙個遠端word文件讀成乙個二進位制檔案物件( bytesio與本章之前用的stringio 類似),

# 再用 python 的標準庫 zipfile 解壓(所有的 .docx 檔案為了節省空間都進行過壓縮),

# 然後讀取這個解壓檔案,就變成 xml

document = zipfile(wordfile)

xml_content = document.read('word/document.xml')

print(xml_content.decode('utf-8'))

# -*- coding: utf-8 -*-

from zipfile import zipfile

from urllib.request import urlopen

from io import bytesio

from bs4 import beautifulsoup

# 第一步是從檔案讀取xml

wordfile = urlopen("").read()

wordfile = bytesio(wordfile)

# 這段**把乙個遠端word文件讀成乙個二進位制檔案物件( bytesio與本章之前用的stringio 類似),

# 再用 python 的標準庫 zipfile 解壓(所有的 .docx 檔案為了節省空間都進行過壓縮),

# 然後讀取這個解壓檔案,就變成 xml

document = zipfile(wordfile)

xml_content = document.read('word/document.xml')

#print(xml_content.decode('utf-8'))

# 正文包含在標籤中

wordobj = beautifulsoup(xml_content.decode('utf-8'))

textstrings = wordobj.findall("w:t")

# print(textstrings)

for textelem in textstrings:

print(textelem.text)

Python網路資料採集

from urllib.request import urlopen from bs4 import beautifulsoup import re pages set defgetlinks pageurl global pages html urlopen pageurl bsobj beaut...

Python網路資料採集

本書適合熟悉python的程式設計師 安全專業人士 網路管理員閱讀。書中不僅介紹了網路資料採集的基本原理,還深入 了更高階的主題,比如分析原始資料 用網路爬蟲測試 等。此外,書中還提供了詳細的 示例,以幫助你更好地理解書中的內容。這本書中的工具和示例幫我輕鬆地將一些重複性工作自動化了,我可以將省下來...

Python 網路資料採集(二)

使用beautifulsoup解析後的網頁通常是一種帶標籤的類文字形式,個人認為難點就是怎麼通過層層標籤的阻攔,抓取到目標內容。findall tag,attributes,recursive,text,limit,keywords find tag,attributes,recursive,tex...