記錄一下在用python爬取百度連接中遇到的坑:php
1.獲取百度搜索頁面中的域名URLpython
BeautifulSoup獲取a標籤中href屬性後,連接爲百度url,利用request直接訪問默認會直接進行跳轉,沒法獲取所需域名瀏覽器
此時須要將requests的allow_redirects屬性設置爲False,禁止進行跳轉,requests默認會進行跳轉安全
再使用.headers['Location']獲取最後連接:final_url = baidu_url.headers['Location']多線程
2.百度中的連接返回不統一url
獲取到實際域名連接後,發現還有一些奇怪的東西spa
訪問後發現非site蒐集域名線程
忽然想到,頗有多是百度的廣告3d
那就須要篩選出包含baidu.php?的連接去剔除掉blog
a="baidu.php?"
b="url"
if a in b:來進行篩選
3.百度安全驗證繞過
當在百度搜索連接中加入pn頁碼參數時,便會直接出現百度安全驗證(第一次訪問就會出現,並不存在請求頻繁)
但發現當手動在瀏覽器去百度進行site語法請求時,並不會出現百度安全驗證碼,猜測應該是有在HTTP請求頭或者參數中漏掉一些參數
對HTTP請求參數進行一系列不可描述的操做以後,發現還須要"bs"、"rsv_jmp"兩個參數
未添加這兩個參數時,還存在驗證,未得到任何返回數據
添加以後,已成功獲取url
4.獲取查詢的總頁數並去進行遍歷
沒找到獲取總頁面的接口,每次請求最多顯示10個頁面連接,獲取以後的還須要去動態進行交互點擊
網上也沒找到好辦法,最後決定採用while循環,來固定遍歷前N個頁面
當tagh3長度值爲0時直接跳出break
5.連接根域名的去重問題
設置set集合 lines_seen = set()
每次寫入url前判斷
6.多域名多線程問題