python - Scrapy - 如何使用 python 在网络链接中抓取网络链接?
问题描述
我正在尝试抓取:
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。如何只获得第二个网页链接?
解决方案
如评论中所述,该 URL 是使用 Javascript 构建的。如果您查看原始 HTML,它看起来像这样:
无论如何,这真的很重要吗?此 URL https://member.webmd.com/signin将您指向一个有效页面。
如果这很重要,那么您需要一些额外的逻辑来从 Javascript 中提取信息,或者您可以在代码中硬编码完整的 URL。
推荐阅读
- python - 在 django 管理面板中尝试除外
- python - python中时间序列中每个月的训练/测试划分
- vue.js - vue-good-table - 单击排序按钮时自动重新加载页面
- c# - 如何在 ASP.NET Core (.NET 5) 中获取 (IIS) 证书映射用户
- c# - EF Core - 检查是否存在带有原始 sql 的 UDT 给出错误的返回值
- css - Css:我怎样才能从右到左显示这个图像?
- python - 如何使用 PyOpenCl 将参数传递给内核
- java - 如何在 Spring 中搜索名称中的一个单词而不是全名?
- r - HClust 对象的顺序是否给出了标签出现在树上的顺序?
- c++ - C++ QT5 文本编辑追加