Scrapy - Как очистить веб-ссылку внутри веб-ссылки, используя python? - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь очистить:

https://webmd.com/oral-health/oral-lichen-planus#1 с веб-сайта webmd в следующем коде веб-страницы:

<li class="global-nav-sign-in global-nav-hide-mobile" data-metrics-module="">
            <a href="https://member.webmd.com/signin?appid=1&amp;returl=https://www.webmd.com/oral-health/oral-lichen-planus#1" data-metrics-link="reg-login">Sign In</a>
        </li> 

Для этого я использую следующий код scrapy:

import scrapy
import re
import string
import pandas as pd

class HealthItem(scrapy.Item):
    link = scrapy.Field()


def urls_getter():
    fname = "/home/phil/fd/webmd/health.csv"
    pds = pd.read_csv(fname)
    pds_link = pds['link']
    pds_link = pds_link.drop_duplicates(keep = "first", inplace = False)
    pds_link = pds_link.tolist()
    return pds_link


class SymptommdSpider(scrapy.Spider):
    name = "symptommd"
    allowed_domains = ["webmd.com"]
    start_urls = urls_getter()
    def parse(self, response):
        titles = response.xpath('//li[contains(@class, "global-nav-sign-in")]/a[contains(@href, "https:")]')
        for title in titles:
            item = HealthItem()
            item['link'] =  title.xpath('@href').extract()
            yield item

Однако этот код получает только переднюю часть href.А именно, https://member.webmd.com/signin. Как получить только вторую веб-ссылку?

1 Ответ

0 голосов
/ 22 ноября 2018

Как уже упоминалось в комментариях, URL построен с использованием Javascript.Если вы посмотрите на необработанный HTML-код, он будет выглядеть следующим образом:

Raw HTML

Это так или иначе имеет значение?Этот URL https://member.webmd.com/signin указывает на правильную страницу.

Если это имеет значение, вам понадобится дополнительная логика для извлечения информации из Javascript или вы можете жестко закодировать полный URL в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...