Scrapy是否抓取调用:hover以显示附加信息的HTML?

0sgqnhkj  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(151)

我不确定这是不是这个问题的正确位置。
我的问题是:
如果我运行scrapy,它就看不到页面源代码中的电子邮件地址。只有当你把鼠标悬停在有电子邮件地址的用户上时,页面中的电子邮件地址才是可见的。
当我运行我的蜘蛛时,我没有收到电子邮件。我做错了什么?
谢谢你,谢谢你

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
import re

class MailsSpider(CrawlSpider):
    name = 'mails'
    allowed_domains = ['biorxiv.org']
    start_urls = ['https://www.biorxiv.org/content/10.1101/2022.02.28.482253v3']

    rules = (
        Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        emals = re.findall(r'[\w\.]+@[\w\.]+',response.text)
        print(response.url)
        print(emails)
w7t8yxp5

w7t8yxp51#

假设你被允许从一个公共网站上抓取电子邮件联系人,如前所述,scrapy不加载js脚本,你需要一个像Playwright这样的完整呈现浏览器来获取地址。
我已经写了一个快速和肮脏的例子,它是如何工作的,你可以从这里开始,如果你愿意(当然在你安装了剧作家)

import scrapy
from scrapy.http import Request, FormRequest
from playwright.sync_api import sync_playwright
from scrapy.http import HtmlResponse

class PhaseASpider(scrapy.Spider):
    name = "test"
    def start_requests(self):
    yield Request('https://www.biorxiv.org/content/10.1101/2022.02.28.482253v3', callback=self.parse_page)

    def parse_page(self,response):
        with sync_playwright() as p:
            browser = p.firefox.launch(headless=False)
            self.page = browser.new_page(). 
            url='https://www.biorxiv.org/content/10.1101/2022.02.28.482253v3'
            self.page.goto(url)
            self.page.wait_for_load_state("load")
            html_page=self.page.content()
            response_sel = HtmlResponse(url="my HTML string", body=html_page, encoding='utf-8')
            mails=response_sel.xpath('//a[contains(@href, "mailto")]/@href').extract()
            for mail in mails:
                print(mail.split('mailto:')[1])

相关问题