这是我在这里的第一个问题,我正在学习如何自己编码,所以请容忍我。你知道吗
我正在做最后一个CS50项目,我正试图建立一个网站,从网上收集西班牙语课程edx.org网站以及其他开放的在线课程网站。我正在使用scrapy框架来删除上西班牙语课程的过滤结果edx.org网站... 这是我的第一个scrapy蜘蛛,我试图在每个课程链接,然后得到它的名字(在我得到正确的代码,也得到描述,课程网址和更多的东西)。你知道吗
from scrapy.item import Field, Item
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractor import LinkExtractor
from scrapy.loader import ItemLoader
class Course_item(Item):
name = Field()
#description = Field()
#img_url = Field()
class Course_spider(CrawlSpider):
name = 'CourseSpider'
allowed_domains = ['https://www.edx.org/']
start_urls = ['https://www.edx.org/course/?language=Spanish']
rules = (Rule(LinkExtractor(allow=r'/course'), callback='parse_item', follow='True'),)
def parse_item(self, response):
item = ItemLoader(Course_item, response)
item.add_xpath('name', '//*[@id="course-intro-heading"]/text()')
yield item.load_item()
当我用“脏兮兮的runspider”跑蜘蛛的时候edxSpider.py文件-o电子数据交换.csv-t csv“我得到一个空的csv文件,我也认为是没有进入正确的西班牙语课程的结果。你知道吗
基本上我想在每个课程中得到这个链接edx Spanish courses,并得到名称、描述、提供者、页面url和img url。你知道吗
你知道为什么会出问题吗?你知道吗
你不能用一个简单的请求来获取
edx
内容,它使用javascript呈现来动态获取course元素,所以CrawlSpider
在这种情况下不起作用,因为你需要在响应体中找到特定的元素来生成一个新的请求来获取你需要的内容。你知道吗真正的请求(获取课程的url)是this one,但是您需要从前面的响应主体生成它(尽管您可以访问它并获取正确的数据)。你知道吗
因此,要生成真正的请求,需要位于
script
标记中的数据:现在您在
json_data
上有了所需的内容,只需创建字符串URL。你知道吗此页面使用JavaScript从服务器获取数据并添加到页面。你知道吗
它使用的网址像
最后一部分是课程编号,您可以在HTML中找到
代码
相关问题 更多 >
编程相关推荐