【问题标题】:Scrapy - How to scrape a weblink within a weblink using python?Scrapy - 如何使用 python 在网络链接中抓取网络链接?
【发布时间】:2019-04-24 10:38:38
【问题描述】:

我正在尝试刮:

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

但是,此代码仅获取 a href 的前面部分。即https://member.webmd.com/signin。如何只获得第二个网页链接?

【问题讨论】:

标签: python html web-scraping scrapy


【解决方案1】:

如 cmets 中所述,URL 是使用 Javascript 构建的。如果您查看原始 HTML,它看起来像这样:

这真的很重要吗?此 URL https://member.webmd.com/signin 将您指向一个有效页面。

如果这很重要,那么您需要一些额外的逻辑来从 Javascript 中提取信息,或者您可以在代码中硬编码完整的 URL。

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 2020-09-17
    • 2013-06-03
    • 2020-08-31
    • 1970-01-01
    • 2021-04-25
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多