我是新的网页抓取,我想从一个网站上抓取所有产品的信息。
https://www.trendyol.com/
我已经写了一个示例代码来抓取数据,如下所示:
def start_requests(self):
urls = [
'https://www.trendyol.com/camasir-deterjani-x-c108713',
'https://www.trendyol.com/yumusaticilar-x-c103814',
'https://www.trendyol.com/camasir-suyu-x-c103812',
'https://www.trendyol.com/camasir-leke-cikaricilar-x-c103810',
'https://www.trendyol.com/camasir-yan-urun-x-c105534',
'https://www.trendyol.com/kirec-onleyici-x-c103806',
'https://www.trendyol.com/makine-kirec-onleyici-ve-temizleyici-x-c144512'
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse, meta=meta, dont_filter=True)
def parse(self, response):
soup = BeautifulSoup(response.text, 'lxml')
data = re.search(r"__SEARCH_APP_INITIAL_STATE__=(.*?});", response.text)
data = json.loads(data.group(1))
for p in data["products"]:
item=TeknosaItem()
item['rowid'] = hash(str(datetime.datetime.now()) + str(p["id"]))
item['date'] = str(datetime.datetime.now())
item['listing_id'] = p["id"]
item['product_id'] = p["id"]
item['product_name'] = p["name"]
item['price'] = p["price"]["sellingPrice"]
item['url'] = p["url"]
yield item
我编写的代码能够抓取第一页上列出的所有产品的数据,但是当我们向下滚动页面时,页面会通过 AJAX GET请求动态加载更多数据,而它无法抓取这些数据。我看过一些视频,读过一些文章,但我无法弄清楚如何滚动在滚动时动态生成的数据。任何帮助都将不胜感激。
我在目标站点上找到了无限页示例:
web site link
2条答案
按热度按时间gywdnpxw1#
我不使用Scrapy,但你可以调整下一个例子,如何从类别中获取所有产品(使用他们的 AJAX API):
这将获取类别中的所有产品:
qlfbtfca2#
所以老实说,我认为最好的方法是从API中获取信息,但我想回答你关于分页的问题。
因此,当你滚动时,你可以看到url发生了变化(
?pi=pagenumber
),所以我们可以循环浏览页面,当我们到达一个不存在的页面(404状态)时,我们将处理状态代码并中断循环。