我试图在网站https://www.medizinfuchs.de上为一种特定药物(例如https://www.medizinfuchs.de/preisvergleich/aspirin-complex-beutel-20-st-bayer-vital-gmbh-pzn-4114918.html)刮取各种药店的价格
该页面可通过“加载更多”按钮进行无限滚动。使用开发人员工具的网络分析,如果我单击此按钮,我会看到页面向https://www.medizinfuchs.de/ajax_apotheken发送post请求。
如果我将此post请求复制为cURL,然后使用curl2scrapy将其转换,则会得到以下代码:
from scrapy import Request
url = 'https://www.medizinfuchs.de/ajax_apotheken"'
request = Request(
url=url,
method='POST',
dont_filter=True,
)
fetch(request)
网络分析表明,对post请求的响应是HTML格式的(类似于主页),但所有药店都列在那里,并附有价格(在我单击“加载更多”按钮之前,主页上仅列出了十家药店)
我有点尴尬的问题——我还是一个绝对的初学者——现在是如何将这个post请求集成到我以前的python代码中,以便扫描所有药店,并获取所有药店的价格信息。我以前的python代码是:
import scrapy
class MedizinfuchsSpider(scrapy.Spider):
name = "medizinfuchs"
start_urls = [
'https://www.medizinfuchs.de/preisvergleich/aspirin-complex-beutel-20-st-bayer-vital-gmbh-pzn-4114918.html'
]
def parse(self, response):
for apotheke in response.css('div.apotheke'):
yield {
'name': apotheke.css('a.name::text').getall(),
'single': apotheke.css('div.single::text').getall(),
'shipping': apotheke.css('div.shipping::text').getall(),
}
我将非常感谢您的支持:-)
基督教徒
如果您愿意接受仅使用请求和beautifulsoup的建议,您可以:
requests.Session()
存储cookie并对urls.get(url)
执行第一次调用。这将得到与产品id相等的cookieproduct_history
requests.post
调用您在chrome开发工具中发现的API,并在表单数据中指定id
以下示例迭代产品列表并执行上述流程:
答复:https://replit.com/@bertrandmartel/ScrapeMedicinFuchs
注意,在上面的解决方案中,我只使用
requests.Session()
来获取product_history
cookie。后续调用中不需要该会话。这样,我就可以直接获得产品id,而不必在html/js中使用正则表达式。但是可能有更好的方法来获取产品id,我们无法从url获取它,因为它只有部分产品id4114918
,而不是1104114918
(如果您不想对110
后缀部分进行编码)相关问题 更多 >
编程相关推荐