为何BeautifulSoup选择器报错而Scrapy的response.css却正常工作?
问题原因与解决办法
报错原因
BeautifulSoup的select方法依赖soupsieve库解析CSS选择器,该库严格遵循CSS规范:ID选择器不能以未转义的数字开头。你的目标ID是30-11-2022,以数字开头,直接用div#30-11-2022会被判定为语法错误。
而Scrapy的CSS选择器实现做了兼容处理,允许这种不符合标准的写法,所以能正常运行。
解决办法
改用属性选择器定位元素,避开ID选择器的语法限制:
res = requests.get('https://sports.ndtv.com/fifa-world-cup-2022/schedules-fixtures') soup = BeautifulSoup(res.text,'html.parser') date_today = date.today() d1 = date_today.strftime("%d-%m-%Y") # 用属性选择器匹配id属性值 cont = soup.select(f'div[id="{d1}"]')
属性选择器div[id="30-11-2022"]直接匹配元素的id属性值,不受ID开头字符的限制,可正常定位到目标元素。
内容的提问来源于stack exchange,提问作者Pranav Anand
相关产品推荐
相关产品推荐

