Python中requests庫(kù)爬取網(wǎng)站亂碼的解決方法,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出繁昌免費(fèi)做網(wǎng)站回饋大家。
【寫(xiě)在前面】
在用requests庫(kù)對(duì)自己的CSDN個(gè)人博客(https://blog.csdn.net/yuzipeng)進(jìn)行爬取時(shí),發(fā)現(xiàn)亂碼報(bào)錯(cuò)(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9),如下圖所示:
網(wǎng)上 查找了一些方法,以為是遇到了網(wǎng)站加密處理。后來(lái)發(fā)現(xiàn) 通過(guò)F12還 是能獲取網(wǎng)頁(yè)的元素,那么有什么辦法能規(guī)避亂碼問(wèn)題呢?答案是:用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成長(zhǎng)之路\\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()
【知識(shí)點(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 條件]
類(lèi)似這樣就可以實(shí)現(xiàn)將for循環(huán)的多行程序濃縮到一句代碼 中,如
blogtitle = [title.text for title in titles]
而如果用for循環(huán)寫(xiě),則需要這樣:
blogtitle = []for title in titles: blogtitle.append(title)
(2)字典推導(dǎo)式:{ key表達(dá)式: value表達(dá)式 for value in collection if condition }
這樣的寫(xiě)法,一般用于key和value能相互轉(zhuǎn)換;但是如果key和value是完全不同的列表,那就需要用zip對(duì)key/value進(jìn)行整合。
myblog = {k:v for k,v in zip(blogtitle,blogurl)}
如果對(duì)zip函數(shù)不熟悉,可以用下面的例子來(lái) 介紹下。
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)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。