Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不打印评论?我是否使用了正确的HTML元素?_Python_Html_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 为什么不打印评论?我是否使用了正确的HTML元素?

Python 为什么不打印评论?我是否使用了正确的HTML元素?,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我正试图打印出yelp对某家餐厅评论的段落部分。我不确定是否正确实现了BeautifulSoup函数。 我提供下面的代码 我见过类似的soup.find_的实现。我想这是我在属性中添加了什么的问题。我认为最好找到所有具有相同类名并包含评论的div元素 for i in range (0,500,20): url = 'https://www.yelp.com/biz/m%C3%A9m%C3%A9-mediterranean-new-york-4?start={}'.format(i)

我正试图打印出yelp对某家餐厅评论的段落部分。我不确定是否正确实现了BeautifulSoup函数。 我提供下面的代码

我见过类似的soup.find_的实现。我想这是我在属性中添加了什么的问题。我认为最好找到所有具有相同类名并包含评论的div元素

for i in range (0,500,20):
    url = 'https://www.yelp.com/biz/m%C3%A9m%C3%A9-mediterranean-new-york-4?start={}'.format(i)
    response = requests.get(url, headers=headers, verify=False).text
    soup = BeautifulSoup(response, "lxml")
    for s in soup.find_all('div', attrs={'span class': 'lemon--span__373c0__3997G'}):
      re = s.find('p', attrs={'lang': 'en'})
      print(re.text)
现在,当我运行此代码时,它不会输出任何错误。它只说:“进程结束,退出代码为0”
这让我相信我没有正确地使用正确的元素,或者在for循环中弄乱了逻辑。

html看起来很多都是动态的,例如类名等会随着时间的推移而改变。我将从
脚本
中获取评论信息,并使用json库进行解析

import requests,json
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.yelp.com/biz/m%C3%A9m%C3%A9-mediterranean-new-york-4')
soup = bs(r.content, 'lxml')
data = json.loads(soup.select_one('[type="application/ld+json"]').text.strip())
print(data)

如果你想废除bs4,你只需要正则化所需的字符串

import requests,json, re

r = requests.get('https://www.yelp.com/biz/m%C3%A9m%C3%A9-mediterranean-new-york-4')
p = re.compile(r'({"aggregateRating.+?(?=<))', re.DOTALL)
data = json.loads(p.findall(r.text)[0].strip())
导入请求、json、re r=请求。获取('https://www.yelp.com/biz/m%C3%A9m%C3%A9-地中海-纽约-4')
p=re.compile(r'({)aggregating.+?(?=html看起来很多都是动态的,例如类名等会随着时间的推移而改变。我会从
脚本
中抓取评论信息,并用json库进行解析

import requests,json
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.yelp.com/biz/m%C3%A9m%C3%A9-mediterranean-new-york-4')
soup = bs(r.content, 'lxml')
data = json.loads(soup.select_one('[type="application/ld+json"]').text.strip())
print(data)

如果你想废除bs4,你只需要正则化所需的字符串

import requests,json, re

r = requests.get('https://www.yelp.com/biz/m%C3%A9m%C3%A9-mediterranean-new-york-4')
p = re.compile(r'({"aggregateRating.+?(?=<))', re.DOTALL)
data = json.loads(p.findall(r.text)[0].strip())
导入请求、json、re r=请求。获取('https://www.yelp.com/biz/m%C3%A9m%C3%A9-地中海-纽约-4')
p=re.compile(r'({)聚合.+?(?=
span class
不是有效属性。您不能用它来表示它应该查找该类的子span。用您想要的类搜索span,然后找到它的父span,找到
p
span class
不是有效属性。您不能用它来表示它应该查找具有该类的子span类。使用所需的类搜索span,然后获取其父级并查找
p
。运行每个段时,我都会收到错误。执行时。text.strip()我收到AttributeError消息,说“NoneType”对象没有属性“text”。我认为这意味着bs捕获的任何内容都是空的。在下一段代码中,我得到一个索引器:列表索引超出范围。我认为出于某种原因,带有评论/评级的json是空的。运行每个段时,我都会出错。当我这样做时。text.strip()我收到AttributeError消息说“NoneType”对象没有属性“text”。我认为这意味着bs捕获的任何内容都是空的。在下一段代码中,我得到了一个索引器:列表索引超出范围。我认为出于某种原因,带有评论/评级的json是空的。