Scrapy не может очистить поле электронной почты с сайта - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь очистить веб-сайт от его данных, и кажется, что javascript в браузере останавливается, чтобы получить адрес электронной почты.

Кто-нибудь, пожалуйста, дайте мне знать, как получить адрес электронной почты?

веб-сайт: https://directory.easternuc.com/publicDirectory

from scrapy import cmdline
import scrapy
from tutorial.items import TutorialItem


class DemoSpider(scrapy.Spider):
    name = "DemoSpider"

    def start_requests(self):
        urls = []
        for page in range(1, 3):
            url = "https://directory.easternuc.com/publicDirectory?page=%s" %page
            urls.append(url)

        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):

        item = TutorialItem()
        index = 1
        for _ in response.selector.xpath("//tr/td/h4/text()").getall():
            item['name'] = response.selector.xpath("//tr[%s]/td/h4/text()" % index).get()
            item['phone'] = response.selector.xpath("//tr[%s]/td[2]/text()" % index).get()
            item['mobile'] = response.selector.xpath("//tr[%s]/td[3]/text()" % index).get()
            item['email'] = response.selector.xpath("//tr[%s]/td[4]/text()" % index).get()
            index += 1
            yield item

1 Ответ

0 голосов
/ 07 апреля 2020

Это потому, что эти письма не являются непосредственными потомками тега td

Пожалуйста, попробуйте этот код

def parse(self, response):
    for tr in response.xpath("//table/tr"):
        item = TutorialItem()
        item['name'] = tr.xpath("./td[1]/h4/text()").get()
        item['phone'] = tr.xpath("./td[2]/text()").get()
        item['mobile'] = tr.xpath("./td[3]/text()").get()
        item['email'] = "".join(tr.xpath("./td[4]//text()").getall())
        yield item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...