【发布时间】: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&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。如何只获得第二个网页链接?
【问题讨论】:
-
这正是
@href在页面源代码中的显示方式。你想要的输出是什么? -
这部分 URL 好像是用 JavaScript 添加的。
标签: python html web-scraping scrapy