使用Scrapy爬取MedlinePlus时A-Z页面导航的实现问题
解决MedlinePlus A-Z页面的Scrapy导航问题
因为MedlinePlus的A-Z页面遵循固定命名规则,你可以通过两种方式实现全字母页面的爬取导航:
方法一:直接生成所有A-Z页面URL加入Start_urls
利用Python的字符生成逻辑,一次性生成从A到Z的所有页面链接,直接写入爬虫的start_urls列表:
import scrapy class MedlineSpider(scrapy.Spider): name = 'medline_spider' # 生成A-Z对应的所有页面URL start_urls = [f'https://medlineplus.gov/ency/encyclopedia_{chr(ord("A") + i)}.htm' for i in range(26)] def parse(self, response): # 执行你已实现的子链接提取逻辑 for sublink in response.css('your-sublink-selector'): yield scrapy.Request(sublink, callback=self.parse_sublink) def parse_sublink(self, response): # 提取子页面的标题与描述 yield { 'title': response.css('your-title-selector::text').get(), 'description': response.css('your-description-selector::text').get() }
方法二:动态生成并请求A-Z页面(适合扩展场景)
如果后续需要调整字母范围或添加其他逻辑,可以在start_requests方法里动态生成URL并发起请求:
import scrapy class MedlineSpider(scrapy.Spider): name = 'medline_spider' def start_requests(self): # 遍历A到Z的字母,生成对应URL for i in range(26): letter = chr(ord("A") + i) target_url = f'https://medlineplus.gov/ency/encyclopedia_{letter}.htm' yield scrapy.Request(target_url, callback=self.parse) def parse(self, response): # 子链接提取逻辑 for sublink in response.css('your-sublink-selector'): yield scrapy.Request(sublink, callback=self.parse_sublink) def parse_sublink(self, response): # 标题与描述提取逻辑 yield { 'title': response.css('your-title-selector::text').get(), 'description': response.css('your-description-selector::text').get() }
关键注意事项
- 替换代码中的
your-sublink-selector、your-title-selector、your-description-selector为你实际使用的CSS选择器。 - 遵守网站爬取规则,可在
settings.py中设置DOWNLOAD_DELAY参数控制请求间隔,避免被封禁。
内容的提问来源于stack exchange,提问作者Sairam S
相关产品推荐
相关产品推荐

