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...