我试图建立一个网站刮板获得价格折扣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'属性,但它不是唯一的问题。当一个属性有多个由空格分隔的值时,条件会分别在每个值上进行测试,直到一个成功*(而不是整个属性)*。在任何情况下,正则表达式都是错误的,使用正则表达式不是这里的好方法,它更容易使用函数作为条件。在循环中放置模式编译会减慢代码的速度。 –