python3爬蟲踩坑記錄篇(一)

2021-08-25 19:29:48 字數 1779 閱讀 4092

最近在寫**的時候經常報錯,能力有限,再此只提供解決辦法,如有錯誤請及時糾正

1:scrapy做post提交data鍵值都是字串,如有漢字或數值型別先轉字串

yield scrapy.formrequest(url=start_url,headers=headers,method = 'post',formdata=data,callback=self.parse,dont_filter=true)
同時dont_filtter,要慎重考慮是否開啟,因為他是true為scrapy不過濾url

2:xpath不能使用想獲取所有文字這種索引寫法。解決方案:

data = selector.xpath('//div[@id="test3"]')

info = data.xpath('string(.)').extract()[0]

當然提取文字只是一種方法,再有文章將會詳細寫下scrapy的selector選擇器

這裡還有個xpath選擇層級想說說

(//node)[1]#選擇當前所有節點中的第乙個 xp("(//ul/li)[1]")

//node[1]從父節點向上擷取該節點中出現的第乙個(可以匹配出多個父節點下的第乙個為node的節點)xp("/

/ul/li[1]")

3extract()出來是乙個列表extract_first(「」)出來是字串預設值

列表加到字串中」「.join(),,當然你想切割原字串加點佐料也是可以的:

"_".join(str.split(""))#split切割之後是乙個列表,可以將"_"作為str每個元素的間隔,當然replace()和正則的sub()亦可實現
replace(' ','')

.extract_first("").replace(u'\u3000',u'')##\u3000(\u3000 是全形的空白符)

##含有 \xa0 (\xa0 是不間斷空白符  )也是類似的方法

5#使用此包有時會報錯可修改:fake_useragent.useragent(use_cache_server=false)#window要加linux去掉

6:**優化的好思路,一般提取不同欄位都是分開,但是此處是個好思路

links = response.xpath('//a[contains(@href, "image")]').extract() 

forindex, link in enumerate(links): ###列舉的是帶有索引的所以後面再提取就會方便

args =(index,link.xpath('@href').extract(),link.xpath('img/@src').extract())`

7那麼在我們程式當中有時在減少**冗餘,會將相同的**段給個狀態碼來觸發,如果狀態碼沒有回歸原始位,會使你的狀態一直停留在最後乙個狀態,ps:就像迴圈中不break一樣

state=1

####這種狀況下很容易在執行一次滿足條件state永久變為3

for i in 。。。:

if ..:

elif..:

state=3

else..:

state=3

ifstate==3:

那麼此時一定要在if state==3:後面的**段中寫入state=1.。。當然你可能有其他需求

好了最近比忙平時也忘記了記錄踩過的坑有時間再寫吧

python3爬蟲踩坑記紀錄篇(二)

1首先這兩天遇到執行緒鎖的問題不涉及鎖機制,只改 執行緒鎖的時候一定要鎖上全域性變數,區域性變數或沒鎖的情況都會造成程式重複 mutex threading.lock 改寫後方案 with mutex for i in range 1000000 鎖定期間,其他執行緒不可以幹活 num 1原方案 當...

Python3 傳送郵件踩坑記錄

新手學習python3.5,根據教程試一試使用python3.5中的smtplib模組傳送電子郵件。出現多個問題 1 error 無法傳送郵件.case 550,b user has no permission 和 error 無法傳送郵件.case 535,b error authenticati...

Python 踩坑記錄

1.浮點數判斷 工作中遇到類似下面邏輯判斷 i 1 while i 1.5 i i 0.1 print i在想象中i應該停止在1.5就不輸出了,但是實際的輸出結果是無限迴圈。這是因為在計算機的邏輯中,浮點數的儲存規則決定了不是所有的浮點數都能準確表示,有些是不準確的,只是無限接近。如0.1轉換為二進...