下面是使用硒/美汤的代码
import selenium
from selenium import webdriver
from bs4 import BeautifulSoup
URL ='https://www.yelp.com/biz/ziggis-coffee-longmont'
driver =
webdriver.Chrome(r"C:\Users\Fariha\AppData\Local\Programs\chromedriver_win32\chromedriver.exe")
driver.get(URL)
yelp_page_source_page1 = driver.page_source
soup = BeautifulSoup(yelp_page_source_page1,'html.parser')
spans = soup.find_all('span')
结果:“跨度”中有990个元素。我只是展示与我的问题相关的东西:
另一种方法是直接从网站上的JSON api中提取数据。这可以在没有硒的开销的情况下完成,如下所示:
from bs4 import BeautifulSoup
import requests
import json
session = requests.Session()
r = session.get('https://www.yelp.com/biz/ziggis-coffee-longmont')
#r = session.get('https://www.yelp.com/biz/menchies-frozen-yogurt-lafayette')
soup = BeautifulSoup(r.content, 'lxml')
# Locate the business ID to use (from JSON inside one of the script entries)
for script in soup.find_all('script', attrs={"type" : "application/json"}):
gaConfig = json.loads(script.text.strip('<!-->'))
try:
biz_id = gaConfig['gaConfig']['dimensions']['www']['business_id'][1]
break
except KeyError:
pass
# Build a suitable JSON request for the required information
json_post = [
{
"operationName": "GetBusinessAttributes",
"variables": {
"BizEncId": biz_id
},
"extensions": {
"documentId": "35e0950cee1029aa00eef5180adb55af33a0217c64f379d778083eb4d1c805e7"
}
},
{
"operationName": "GetBizPageProperties",
"variables": {
"BizEncId": biz_id
},
"extensions": {
"documentId": "f06d155f02e55e7aadb01d6469e34d4bad301f14b6e0eba92a31e635694ebc21"
}
},
]
r = session.post('https://www.yelp.com/gql/batch', json=json_post)
j = r.json()
business = j[0]['data']['business']
print(business['name'], '\n')
for property in j[1]['data']['business']['organizedProperties'][0]['properties']:
print(f'{"Yes" if property["isActive"] else "No":5} {property["displayText"]}')
这将为您提供以下条目:
Ziggi's Coffee
Yes Offers Delivery
Yes Offers Takeout
Yes Accepts Credit Cards
Yes Private Lot Parking
Yes Bike Parking
Yes Drive-Thru
No No Outdoor Seating
No No Wi-Fi
这是怎么解决的?
这里你最好的朋友是你浏览器的网络开发工具。有了这个,你可以观看获取信息的请求。正常的处理流程是初始超文本标记语言页面被下载,这运行javascript并请求更多的数据来进一步填充页面。
诀窍是首先定位您想要的数据所在的位置(通常以JSON的形式返回),然后确定重新创建请求所需的参数所需的内容。
要进一步理解此代码,请使用print()
。打印所有内容,它将显示每个部分如何构建在下一个部分上。剧本就是这样写的,一次一点。
使用Selenium的方法允许javascript工作,但大多数情况下这并不需要,因为它只是发出请求并格式化数据以供显示。
我正在使用javascript(extensions chrome)在程序“Atom”中制作一个机器人,并希望点击按钮“添加到购物车”。我的html是。我猜我在使用值时需要这样做。怎么做?
要获取当前选定行的行信息,可以执行以下操作 但如何获得相同的,当我点击编辑按钮? 我尝试了它没有工作。 编辑 我尝试了下面答案中建议的方法,但它仍然给我空值 完整代码
问题内容: 我需要自动单击网页中的任何“添加”按钮,如下所示: “ https://groceries.asda.com/search/yoghurt ” 但是,页面中的“添加”按钮都没有名称或ID。所以我不能使用Selenium包中的命令。 谁能帮我? 问题答案: 要单击特定产品的任何特定按钮,可以编写如下方法: 现在,您可以单击传递其标题的任何按钮,如下所示:
我一直在尝试使用selenium完成输入框,但在单击添加新客户按钮后总是找不到该输入框,它总是显示一个空白的白页。我通过chrome和fire fox@Test public val AddTouch()抛出中断异常{
不含硒 我需要点击一个网页上的按钮。有可能与请求有关吗?我不想用硒。 提前道谢!
我正在尝试从政府网站自动下载表单数月的过程。它要求我登录到我的帐户,然后单击一些按钮继续。出于某种原因,我不想使用IE自动化,因此,我选择通过Excel VBA使用硒来自动化Chrome。我可以登录,但是,登录后我无法单击按钮。到目前为止,我的VBA代码如下 - 在此之后,我想单击一个按钮,该按钮的HTML是 请注意,还有其他按钮具有相同的类。请指导我如何单击此按钮?