Python爬蟲編程常見問題解決方法


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,就可以了
這里寫圖片描述

我的爬蟲筆記


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM