#python #scrapy
Вопрос:
Я пытаюсь устранить ошибку из следующего кода:
import scrapy
class microeconomics_edX(scrapy.Spider):
name='microeconomics'
allowed_domains = ['https://www.edx.org/course/microeconomics']
start_urls=['https://www.edx.org/course/microeconomics']
custom_settings = {'FEED_URI' : 'tmp/shopclues.csv'}
def parse(self,response):
titles=response.xpath('//*[@id="main-content"]/div/div[1]/div/div[5]/div[1]/h1').get()
subtitles=reponse.xpath('//*[@id="main-content"]/div/div[1]/div/div[5]/div[1]/div/p').get()
uni=response.xpath('//*[@id="main-content"]/div/div[2]/div[2]/div/div[1]/div/div/div[1]/div/div[1]/span').get()
instructor=reponse.xpath('//*[@id="main-content"]/div/div[4]/div/a/div/div').get()
ataglance=reponse.xpath('//*[@id="main-content"]/div/div[3]/div/div[2]/div/div/div[1]/ul/li[4]/div/p').get()
for item in zip(titles,subtitles,uni,instructor,ataglance):
scrapped_info={
'title': item[0],
'subtitles': item[1],
'uni': item[2],
'instructor': item[3]
}
yield scrapped_info
Комментарии:
1. Пожалуйста, предоставьте обратную трассировку ошибок.
Ответ №1:
- Вы написали «ответ» вместо «ответа»
- Ваш xpath «инструктор» неверен, и вы поймете, что получаете «Нет», этот контент создается с помощью javascript:
<script data-rh="true" type="application/ld json">{"@context":"http://schema.org","@type":"Course","@id":"https://www.edx.org/course/microeconomics","name":"Microeconomics","courseCode":"MITx 14.100x","url":"https://www.edx.org/course/microeconomics","about":"Economics amp; Finance","educationalCredentialAwarded":"edX Certificate","isAccessibleForFree":true,"inLanguage":"en-us","timeRequired":"W11","description":"<p>Use economic models to learn how prices and markets benefit society in the face of scarcity, and then apply those models to analyze policy.</p>","provider":[{"@type":"CollegeOrUniversity","name":"Massachusetts Institute of Technology","sameAs":"https://www.edx.org/school/mitx"}],"hasCourseInstance":[{"@type":"CourseInstance","instructor":[{"@type":"Person","name":"Jonathan Gruber"}],"startDate":"2021-09-07T16:00:00Z","endDate":"2021-11-23T17:00:00Z","name":"Microeconomics"}],"image":{"@type":"ImageObject","url":"https://prod-discovery.edx-cdn.org/media/course/image/1b473926-2554-4b9f-86ba-8e4c5debb8eb-eb606b5ea35e.small.jpg"},"courseSku":null}</script>
Вы можете получить его с помощью регулярных выражений, если хотите.
- Так как вы ваш «инструктор» — это «Нет», вы получаете ошибку:
TypeError: zip argument #4 must support iteration
, когда вы правильно очистите ее (и замените ответ на ответ), она будет работать.
Вот альтернативное решение: поскольку он генерируется с помощью javascript из файла json, вы можете просто получить его оттуда.
Сделайте запрос с помощью scrapy с URL-адресом json: https://www.edx.org/page-data/course/microeconomics/page-data.json
(не забудьте добавить заголовки запросов) и просто соскоблите его оттуда.