❶ python爬蟲抓下來的網頁,中間的中文亂碼怎麼解決
對於python的中文編碼問題可以參考下面的帖子
http : //python .jobbole. com/85482/
對於網頁的中文亂碼,建立使用requests模塊代替urllib\urllib2
requests的content方法,對中文編碼,支持比較好,基本不會出現亂碼。
req=requests.get(url,cookies=mecookies)
print req.content
具體用法,參見下面兩個帖子,較詳細:
http :// blog.csdn . net/iloveyin/article/details/21444613
http : //blog .csdn . net/alpha5/article/details/24964009
❷ python怎樣抓取網頁中的文字和數字數據
通過xpath路徑來定位到要提取的元素,在路徑後面加上/text()可以提取該元素的文本,如果是要提取屬性值,在路徑後面加上/@屬性名就可以。如果要只採集數字或者文字,可以使用正則來實現。比如數字的正字表達式:[0-9]+。希望可以幫到題主
❸ python3.9。在網頁源代碼中爬取的漢字代碼如何轉換回漢字
以前總是覺得,爬蟲是個很高大上的東西,就像盜取別人的數據一樣。現在才知道,爬蟲能爬到的,都是網頁上能看到的,說白了就是別人給你看的。
所謂爬蟲,就是先獲取網頁的源代碼,然後從源代碼中篩選出自己想要的資源,比如網頁上的圖片、視頻等文件,甚至網頁上的文字。接下來,我們就用Python來爬取網頁上的圖片。
首先我們先獲取網站的源碼。
然後就是從萬千的源碼中解析出自己想要的資源了,我這里想要的是網站上的圖片。
個人覺得,這個爬蟲考驗的,還是正則表達式的功底,怎麼寫好正則表達式,才能將所有想要的資源都解析出來,其他的都比較簡單。
以下是我從網頁上爬下來的部分圖片。
❹ 如何利用python爬取網頁內容
利用python爬取網頁內容需要用scrapy(爬蟲框架),但是很簡單,就三步
定義item類
開發spider類
開發pipeline
想學習更深的爬蟲,可以用《瘋狂python講義》
❺ python怎麼抓取網頁中DIV的文字
1、編寫爬蟲思路:
確定下載目標,找到網頁,找到網頁中需要的內容。對數據進行處理。保存數據。
2、知識點說明:
1)確定網路中需要的信息,打開網頁後使用F12打開開發者模式。
在Network中可以看到很多信息,我們在頁面上看到的文字信息都保存在一個html文件中。點擊文件後可以看到response,文字信息都包含在response中。
對於需要輸入的信息,可以使用ctrl+f,進行搜索。查看信息前後包含哪些特定欄位。
對於超鏈接的提取,可以使用最左邊的箭頭點擊超鏈接,這時Elements會打開有該條超鏈接的信息,從中判斷需要提取的信息。從下載小說來看,在目錄頁提取出小說的鏈接和章節名。
2)注意編碼格式
輸入字元集一定要設置成utf-8。頁面大多為GBK字元集。不設置會亂碼。
❻ python用request爬取頁面遇到script的documentwrite里得不到中文怎麼辦
看上去是write了base64編碼的字元串,d是解碼函數。
❼ Python+requests 爬取網站遇到中文亂碼怎麼辦
1. 遇到的中文亂碼問題
1.1 簡單的開始
使用requests來拔取網站內容十分方便,一個最簡單的代碼段只需要2-3行代碼就行。
點擊(此處)折疊或打開
url = 'http // www . pythonscraping . com/'
req = requests.get(url)
print(req.text)
tree = html.fromstring(req.text)
print(tree.xpath("//h1[@class='title']/text()"))
上面的代碼段起作用的也就3行(2,4,5)代碼就獲取到我們想要的內容。當然還要導入一系列的包,比如說requests、lxml、html等。當然由於http//www.pythonscraping.com/是英文網站,不存在中文亂碼問題。
1.2 麻煩的開始
本來當時的想法是寫一些基礎模塊,方便之後開發的時候調用,減少重復性工作。為了保證代碼在任何情況下都不會出現bug,所以想著用同樣的代碼爬取中文網站獲取裡面的文字
修改上面代碼中的兩行代碼:
點擊(此處)折疊或打開
url = 'http : // sports . sina . com . cn/g/premierleague/index.shtml'
print(tree.xpath("//span[@class='sec_blk_title']/text()"))
運行程序可以發現,在語句print(req.text)輸出的內容中,中文字體已經是亂碼了。最後的結果輸出是['?????©è§\x86é?\x91', '??\x80?\x9c\x9f?\x9b\x9eé??']
2 亂碼解決辦法
2.1 試錯
由於之前爬取csdn上一個網頁沒有出現亂碼問題,但是在sina體育網站上出現了亂碼,所以當時以為不是編碼問題,以為是文檔壓縮問題。因為csdn獲取的頁面header里沒有「Content-Encodings」屬性,但是sina體育獲取的頁面header有「Content-Encodings」屬性--「Content-Encoding: gzip」。
2.2 亂碼終極解決辦法
後來查閱官方文檔中response-content相關內容,說明了Requests會自動解碼來自伺服器的內容。Requests會基於HTTP頭部對響應的編碼作出有根據的推測,前提是響應文檔的HTTP headers裡面沒有相關字元集說明。官方文檔還說明了,如果你創建了自己的編碼,並使用codecs 模塊進行注冊,你就可以輕松地使用這個解碼器名稱作為 r.encoding 的值, 然後由Requests來為你處理編碼。(自己沒有使用codecs模塊,所以這里不貼代碼了,不過按官方的說法使用codecs模塊是最簡單的一種方式。)
另一份官方文檔片段明確說了reponse編碼處理方式:
Requests遵循RFC標准,編碼使用ISO-8859-1 。
只有當HTTP頭部不存在明確指定的字元集,並且 Content-Type 頭部欄位包含 text 值之時, Requests才不去猜測編碼方式。
現在直接上實驗結果,在原始代碼中添加以下代碼片段:
點擊(此處)折疊或打開
print(req.headers['content-type'])
print(req.encoding)
print(req.apparent_encoding)
print(requests.utils.get_encodings_from_content(page_content.text))
輸出結果分別是:
text/html
ISO-8859-1#response內容的編碼
utf-8#response headers里設置的編碼
['utf-8']#response返回的html header標簽里設置的編碼
返回的內容是採用『ISO-8859-1』,所以出現了亂碼,而實際上我們應該採用『utf-8』編碼
總結:當response編碼是『ISO-8859-1』,我們應該首先查找response header設置的編碼;如果此編碼不存在,查看返回的Html的header設置的編碼,代碼如下:
點擊(此處)折疊或打開
if req.encoding == 'ISO-8859-1':
encodings = requests.utils.get_encodings_from_content(req.text)
if encodings:
encoding = encodings[0]
else:
encoding = req.apparent_encoding
encode_content = req.content.decode(encoding, 'replace').encode('utf-8', 'replace')
❽ 如何用Python requests 爬取網頁所有文字
您可以用requests庫的get方法,以請求的網址為參數,獲取網頁所有html代碼,再訪問結果是text屬性即可。
❾ 如何用Python爬蟲抓取網頁內容
首先,你要安裝requests和BeautifulSoup4,然後執行如下代碼.
importrequests
frombs4importBeautifulSoup
iurl='http://news.sina.com.cn/c/nd/2017-08-03/doc-ifyitapp0128744.shtml'
res=requests.get(iurl)
res.encoding='utf-8'
#print(len(res.text))
soup=BeautifulSoup(res.text,'html.parser')
#標題
H1=soup.select('#artibodyTitle')[0].text
#來源
time_source=soup.select('.time-source')[0].text
#來源
origin=soup.select('#artibodyp')[0].text.strip()
#原標題
oriTitle=soup.select('#artibodyp')[1].text.strip()
#內容
raw_content=soup.select('#artibodyp')[2:19]
content=[]
forparagraphinraw_content:
content.append(paragraph.text.strip())
'@'.join(content)
#責任編輯
ae=soup.select('.article-editor')[0].text
這樣就可以了
❿ 為什麼python爬取的中文亂碼
編碼錯了唄,python的bytes,默認的decode參數utf-8,如果網頁不是utf-8的,你就得手動指定編碼,國內很多網頁是gbk、gb2312的