Python爬蟲程式設計常見問題解決方法

肖朋偉發表於2018-09-07

Python爬蟲程式設計常見問題解決方法:

1.通用的解決方案:

【按住Ctrl鍵不送鬆】,同時用滑鼠點選【方法名】,檢視文件

2.TypeError: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.

問題描述:【型別錯誤】就是資料的型別應該是bytes型別,而不是str型別
解決方案:

data = data.encode('utf-8')

3.爬取得到的HTML在一行顯示

除錯步驟:通過print(type(html))檢視html的型別, 可以查出是bytes型別,就需要解碼
解決方案:

html = html.decode()

4.有時候使用爬蟲會被網站封了IP,所以需要去模擬瀏覽器

解決方案:

header = {"User-Agent": "mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}
req = request.Request(url=base_url,data=bytes(data,encoding='utf-8'),headers=header)

5.當伺服器返回json格式的資料亂碼

除錯步驟:
1.通過print(type(json_data))檢視資料的型別,
2.可以查出是str型別,就是說返回的字串中有bytes型別的資料
解決方案:把json字串轉換為字典

json_data = json.loads(json_data)

6.怎麼只輸出json資料的value或者某個key對應的value,不要[{}]

問題描述: 想要jsonkey/value的一部分
典型案例:
例如:

 json_data=
      {'errno': 0,
       'data': [{'k': 'good',
                 'v': 'adj. 好的;'
                 },
                {'k': 'good morning',
                 'v': 'int. 早安;'
                 }
               ]
       }

要求: 只想要輸出good: adj. 好的,而不要其他的格式
1.可以通過json_data['data'],只輸出json資料json_data中‘data’對應的值,也就是

 [{'k': 'good',
   'v': 'adj. 好的;'
  },
  {'k': 'good morning',
   'v': 'int. 早安;'
  }
 ]

2.遍歷輸出每個'k'和'v'的值

# 遍歷輸出每個'k'和'v'的值
for item in json_data['data']:
      print(item['k'], ": ", item['v'])

7.返回的頁面是一個連結,而不是連結的頁面

問題描述: 百度搜尋,我們輸入搜尋內容,返回的是一個包括原地址連結的html,而不是訪問該連結 的html,且返回的html中:location.replace(location.href.replace("https://","http://"));
問題例項截圖:
這裡寫圖片描述
解決方案: 如果使用的是http改成https,
如果使用的是https改成http,就可以了
這裡寫圖片描述

我的爬蟲筆記


  • 本筆記不允許任何個人和組織轉載

相關文章