最近在寫**的時候經常報錯,能力有限,再此只提供解決辦法,如有錯誤請及時糾正
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轉換為二進...