我試圖建立一個網站刮板獲得價格折扣http://fetch.co.uk/dogs/dog-food?per-page=20蟒蛇:排除字符串正則表達式
我這裏有下面的代碼:
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(url above)
bsObj = BeautifulSoup(html,"html.parser")
wrapList = bsObj.findAll("",{"class": re.compile("shelf-product__self.*")})
for wrap in wrapList:
print(wrap.find("",{"itemprop": re.compile("shelf-product__price.*(?!cut).*")}).get_text())
print(wrap.find("",{"class": re.compile("shelf-product__title.*")}).get_text())
在每一個包裹,有時有2個不同的價格,我試圖排除降價並獲得低於該價格(促銷價格)的價格。
我無法弄清楚如何排除切割價格,上述表達式不起作用。
"shelf-product__price shelf-product__price--cut [ v2 ]"
"shelf-product__price shelf-product__price--promo [ v2 ]"
我用下面的方法,但我想了解我得到錯誤的正則表達式。對不起,如果代碼不漂亮,我正在學習
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(url above)
bsObj = BeautifulSoup(html,"html.parser")
wrapList = bsObj.findAll("",{"class": re.compile("shelf-product__self.*")})
for wrap in wrapList:
print(wrap.find("",{"itemprop": re.compile("price.*")}).get_text())
print(wrap.find("",{"class": re.compile("shelf-product__title.*")}).get_text())
所提到的URL不似乎與'itemprop =任何元件「保質product__price貨架product__price - 切[V2]」'值用於'itemprop'要麼'title'或'價格'。這就是爲什麼「price。*」的第二個正則表達式正在工作。 – mchackam
@mchackam:它的確是'class'屬性而不是'itemprop'屬性,但它不是唯一的問題。當一個屬性有多個由空格分隔的值時,條件會分別在每個值上進行測試,直到一個成功*(而不是整個屬性)*。在任何情況下,正則表達式都是錯誤的,使用正則表達式不是這裏的好方法,它更容易使用函數作爲條件。在循環中放置模式編譯會減慢代碼的速度。 –