【Python成長之路】Python爬蟲 --requests庫爬取網站亂碼(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解決方法

【寫在前面】

在用requests庫對自己的CSDN個人博客(https://blog.csdn.net/yuzipeng)進行爬取時,發現亂碼報錯(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9),如下圖所示:

網上 查找了一些方法,以爲是遇到了網站加密處理。後來發現 通過F12還 是能獲取網頁的元素,那麼有什麼辦法能規避亂碼問題呢?答案是:用selenium.

【效果如下】

【示例代碼】

# coding=utf-8
# @Auther : "鵬哥賊優秀"
# @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"]/h4/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()

 

【知識點】

1、selenium使用

基本的selenium安裝方法、使用方法(如查找元素的各類函數)可以詳見之前的博客《【Python成長之路】從零學爬蟲--給微信公衆號閱讀量作個弊:刷閱讀量》(https://blog.csdn.net/yuzipeng/article/details/100179696

 

2、推導式使用

(1)列表推導式:[表達式 for 變量 in 列表]    或者  [表達式 for 變量 in 列表 if 條件]

         類似這樣就可以實現將for循環的多行程序濃縮到一句代碼 中,如

blogtitle = [title.text for title in titles]

而如果用for循環寫,則需要這樣:

blogtitle = []
for title in titles:
    blogtitle.append(title)

(2)字典推導式:{ key表達式: value表達式 for value in collection if condition }​​​​​​​

這樣的寫法,一般用於key和value能相互轉換;但是如果key和value是完全不同的列表,那就需要用zip對key/value進行整合。

myblog = {k:v for k,v in zip(blogtitle,blogurl)}

如果對zip函數不熟悉,可以用下面的例子來 介紹下。

a = ['a', 'b', 'c']
b = [1, 2, 3]
c = {k: v for k, v in zip(a, b)}
print(c)

結果是:{'a': 1, 'b': 2, 'c': 3}

 

【關於鵬哥】

“鵬哥賊優秀”的公衆號,有興趣的同學可以關注,一起學習進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章