我试图从这个域中获取所有的xml文件链接。当我使用scrappy shell时,我得到了我所期望的相对链接。
>>> response.xpath('//div[@class="toolbar"]/a[contains(@href, ".xml")]/@href').extract()[1]
'/dhq/vol/16/3/000642.xml'
但是当我试图生成所有链接时,我最终得到的csv文件中包含了所有不完整的链接,或者只是根链接。
数据集示例:https://pastebin.com/JqCKnxV5
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class DhqSpider(CrawlSpider):
name = 'dhq'
allowed_domains = ['digitalhumanities.org']
start_urls = ['http://www.digitalhumanities.org/dhq/vol/16/3/index.html']
rules = (
Rule(LinkExtractor(allow = 'index.html')),
Rule(LinkExtractor(allow = 'vol'), callback='parse_xml'),
)
def parse_xml(self, response):
xmllinks = response.xpath('//div[@class="toolbar"]/a[contains(@href, ".xml")]/@href').extract()[1]
for link in xmllinks:
yield{
'file_urls': [response.urljoin(link)]
}
我的urljoin
中缺少了什么,导致了这些不完整的链接和/或根链接?
1条答案
按热度按时间falq053o1#
CrowlSpider
从每个详细页面中抓取数据,您的选择选择了两个元素,但您必须只选择一个,然后您可以应用xpath表达式的内置索引,以避免不必要的for循环。输出:
...等等
更新日期:
型
输出: