您好,登錄后才能下訂單哦!
Python中requests庫爬取網(wǎng)站亂碼的解決方法,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
【寫在前面】
在用requests庫對自己的CSDN個人博客(https://blog.csdn.net/yuzipeng)進(jìn)行爬取時,發(fā)現(xiàn)亂碼報錯(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9),如下圖所示:
網(wǎng)上 查找了一些方法,以為是遇到了網(wǎng)站加密處理。后來發(fā)現(xiàn) 通過F12還 是能獲取網(wǎng)頁的元素,那么有什么辦法能規(guī)避亂碼問題呢?答案是:用selenium.
【效果如下】
【示例代碼】
# coding=utf-8
# @Auther : "鵬哥賊優(yōu)秀"
# @Date : 2019/10/16
# @Software : PyCharm
from selenium import webdriver
url = 'https://blog.csdn.net/yuzipeng'
driver = webdriver.Chrome("F:\\Python成長之路\\chromedriver.exe")
driver.get(url)
urls = driver.find_elements_by_xpath('//div[@class="article-item-box csdn-tracking-statistics"]')
blogurl = ['https://blog.csdn.net/yuzipeng/article/details/' + url.get_attribute('data-articleid') for url in urls]
titles = driver.find_elements_by_xpath('//div[@class="article-item-box csdn-tracking-statistics"]/h5/a')
blogtitle = [title.text for title in titles]
myblog = {k:v for k,v in zip(blogtitle,blogurl)}
for k,v in myblog.items():
print(k,v)
driver.close()
【知識點(diǎn)】
1、selenium使用
基本的selenium安裝方法、使用方法
(https://blog.csdn.net/yuzipeng/article/details/100179696)
2、推導(dǎo)式使用
(1)列表推導(dǎo)式:[表達(dá)式 for 變量 in 列表] 或者 [表達(dá)式 for 變量 in 列表 if 條件]
類似這樣就可以實現(xiàn)將for循環(huán)的多行程序濃縮到一句代碼 中,如
blogtitle = [title.text for title in titles]
而如果用for循環(huán)寫,則需要這樣:
blogtitle = []for title in titles: blogtitle.append(title)
(2)字典推導(dǎo)式:{ key表達(dá)式: value表達(dá)式 for value in collection if condition }
這樣的寫法,一般用于key和value能相互轉(zhuǎn)換;但是如果key和value是完全不同的列表,那就需要用zip對key/value進(jìn)行整合。
myblog = {k:v for k,v in zip(blogtitle,blogurl)}
如果對zip函數(shù)不熟悉,可以用下面的例子來 介紹下。
a = ['a', 'b', 'c']b = [1, 2, 3]c = {k: v for k, v in zip(a, b)}print(c) 結(jié)果是:{'a': 1, 'b': 2, 'c': 3}
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。