網頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導致自動寫入下一條,如何解決?
問題描述
新手寫二手車網站爬蟲,爬賣價和原價,原價以<s>刪除線形式放在<p class='priType-s'>下。但是遇到沒有標記原價,也就是并沒有<s>標簽的情況下,會自動把下一個<s>內的信息寫入上一條占位。試了用if len()判斷,但是毫無效果。。請問這種情況應當如何解決,把沒有<s>標簽的情況正確提取出來,用“”或“nodata”顯示?
網頁源代碼如下,同時包含原價與賣價的:
<p class='priType-s'> <em class='tag-red'>急售</em> <em class='tag-yellow'>超值</em><span> <i class='fc-org priType'> 8.40萬</i></span> <s>17.36萬</s></p>
沒有原價標簽的:<p class='priType-s'>
<span><i class='fc-org priType'> 3.70萬</i> </span></p>
代碼如下,
import requestsfrom bs4 import BeautifulSoup
def GetInfo(url):
res=requests.get(url).textsoup=BeautifulSoup(res,’html.parser’)names=soup.select(’p.list > ul > li > p > p.infoBox > a’)years=soup.select(’p.list > ul > li > p > p.fc-gray’)prices0=soup.select(’p.list > ul > li > p > p.priType-s > s’)prices1=soup.select(’p.list > ul > li > p > p.priType-s > span > i’)for name,year,price0,price1 in zip(names,years,prices0,prices1): data={’name’:name.get_text(),’year’:year.get_text().strip().replace(’|’,’’).replace(’ ’,’’),’price0’:price0.get_text(),’price1’:price1.get_text().strip() }print(data)return(data)
def Pages():
pageurl=’https://www.guazi.com/sh/buy/o{}/’urls=[pageurl.format(str(i)) for i in range(1,11,1)]for url in urls: GetInfo(url)
Pages()
問題解答
回答1:大體思路就是 多加選擇器,讓它為空,然后你做判斷
回答2:prices0=soup.select(’p.list > ul > li > p > p.priType-s > span> i’)prices1=soup.select(’p.list > ul > li > p > p.priType-s > span + s’)
試試看。如果再不行就把整段給你拿下來用 regex 來提取
回答3:試試這個思路:1.每一個二手車會有一個塊來顯示,<p>..</p>之類的2.在每一個塊當中,再來進行原價,現價的抓取這樣就不會因一個二手車沒有原價而把下一個價位填充到上一個車的原價上
