所以我试图导航到这个url:https://www.instacart.com/store/wegmans/search_v3/horizon%201%25
并使用类item-name item-row
从div中获取数据。但主要有两个问题,第一个是instacart.com网站需要登录才能访问该url,第二个问题是页面的大部分是用javascript生成的。在
我相信我已经解决了第一个问题,因为我的session.post(...)
得到了200个响应代码。我也很确定r.html.render()
应该通过在我刮取之前呈现javascript生成的html来解决第二个问题。不幸的是,我代码中的最后一行只返回一个空列表,尽管selenium获取这个元素没有问题。有人知道为什么这不管用吗?在
from requests_html import HTMLSession
from bs4 import BeautifulSoup
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
session = HTMLSession()
res1 = session.get('http://www.instacart.com', headers=headers)
soup = BeautifulSoup(res1.content, 'html.parser')
token = soup.find('meta', {'name': 'csrf-token'}).get('content')
data = {"user": {"email": "alexanderjbusch@gmail.com", "password": "password"},
"authenticity_token": token}
response = session.post('https://www.instacart.com/accounts/login', headers=headers, data=data)
print(response)
r = session.get("https://www.instacart.com/store/wegmans/search_v3/horizon%201%25", headers=headers)
r.html.render()
print(r.html.xpath("//div[@class='item-name item-row']"))
在使用requests模块和BeautifulSoup登录之后,可以使用我在注释中建议的链接来解析json中可用的所需数据。下面的脚本应该得到您的名称,数量,价格和相关产品的链接。你只能得到21个产品使用下面的脚本。在这个json内容中有一个分页选项。您可以通过使用分页来获得所有产品。在
部分输出:
^{pr2}$相关问题 更多 >
编程相关推荐