我如何使用Scrapy和Playwright来抓取在另一个标签页中单击HTML元素时打开的网页链接?

hts6caw3  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(202)

我想刮这个链接:https://www.magicbricks.com/property-for-sale/residential-real-estate?bedroom=&proptype=Multistorey-Apartment,Builder-Floor-Apartment,Penthouse,Studio-Apartment&cityName=Mumbai表示每个属性的链接。
HTML源代码中没有指向每个属性的各个页面的链接。页面的打开链接到一个事件。如何获得使用Scrapy和Playwright打开的页面的链接?

vatpfxk5

vatpfxk51#

每个网站都是不同的,需要区别对待,通常旅程是从页面的元素面板开始的。

仔细查看一下你分享的url的元素面板,我们可以看到每张卡片都在一个div中,div还有一个脚本标签,里面有一个json,json确实有你要找的URL。
下面是提取URL的代码,您可以在page.evaluate function中运行这些URL。

await page.evaluate(async () => {
  const urls = [];

  // parent card elements
  var cardElements = [...document.querySelectorAll('[class="mb-srp__list"]')];
  for(let cardElement of cardElements) {
    // get nested script tag inside each card element that contains the url
    const script = cardElement.querySelector('script'); 

    // but the content of the tag is a string, so we need to parse
    const cardJSON = JSON.parse(script.innerHTML); 

    // finally save whatever data we want
    urls.push(cardJSON.url);
  }
  return urls;
});

下面是可以进入page.evaluate的代码的较短版本,

[...document.querySelectorAll('[class="mb-srp__list"]')].map(card=>JSON.parse(card.querySelector('script').innerHTML).url)

相关问题