我尝试抓取的网站具有以下结构:
想法是打印所有视频的链接。
我已经成功地分别管理:(1)生成module_urls,(2)抓取指向lesson_urls的链接,以及(3)抓取视频。但是,我正在努力创建适当的循环以使它们一起工作。
以下脚本正确生成module_urls,但是,与我的预期相反,永远不会满足抓取每个网址(然后抓取每个子网址)的请求。我确信这来自于我对该主题的纯粹无知 - 这是我第一次尝试使用Scrapy。
非常感谢你的帮助!
video_links = []
def after_login(self, response):
module_urls = self.generate_links()
for module_url in module_urls:
print("This is one module URL: %s" % module_url)
Request(module_url, self.get_lesson_urls)
print(self.video_links)
def get_lesson_urls(self, response):
print("Entered get_lesson_urls")
urls = response.xpath('//*[starts-with(@id,"post")]//li/a/@href').extract()
for lesson_url in urls:
Request(lesson_url, self.get_video_link)
def get_video_link(self, response):
video_address = response.xpath('//*[starts-with(@id, "post")]//iframe[@name = "vooplayerframe"]/@src').extract_first()
self.video_links.append(video_address)
答案 0 :(得分:0)
我相信你需要提出你的请求对象
video_links = []
def after_login(self, response):
module_urls = self.generate_links()
for module_url in module_urls:
print("This is one module URL: %s" % module_url)
yield Request(module_url, self.get_lesson_urls)
def get_lesson_urls(self, response):
print("Entered get_lesson_urls")
urls = response.xpath('//*[starts-with(@id,"post")]//li/a/@href').extract()
for lesson_url in urls:
yield Request(lesson_url, self.get_video_link)
def get_video_link(self, response):
video_address = response.xpath('//*[starts-with(@id, "post")]//iframe[@name = "vooplayerframe"]/@src').extract_first()
yield video_address
编辑: 而不是打印,如果您随后生成所需的URL,您可以使用以下命令将它们输出为json(和其他格式):
scrapy crawl myspider -o data.json
您可以使用Scrapy的项目管道进一步解析:https://doc.scrapy.org/en/latest/topics/item-pipeline.html