Я немного переживаю со Scrapy - моя задача - получить данные с сайта краудфандинга (я выбрал kickstarter.com). Теперь я начал с сканирования одной страницы (начиная с здесь ) и извлечения из нее ссылок проектов, а затем сканирования по этим ссылкам. В целях отладки я сохранил ответы этих ссылок в виде HTML-файлов. Вот мой код:
import scrapy
import time
import json
from bs4 import BeautifulSoup
class KsSpider(scrapy.Spider):
name = "kickstarter"
def __init__(self):
super().__init__()
self.page = 1
self.dbg = False
start_urls = []
num_pages = 1
for i in range(num_pages):
start_urls.append("https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=0&sort=magic&seed=2569222&page=" + str(i+1) + "")
def parse(self, response):
soup = BeautifulSoup(response.text, features='lxml')
candidates = list(soup.findAll('div', class_='js-react-proj-card'))
urls = set()
for c in candidates:
# extracting the data-project dict
data_project = json.loads(c.attrs['data-project'])
urls.add(data_project['urls']['web']['project'])
for url in urls:
if self.dbg:
print("Sleeping...")
time.sleep(3)
print("Request for url:", url)
yield scrapy.Request(url, callback=self.parse_contents)
def parse_contents(self, response):
filename = 'ksproj-%s.html' % self.page
self.page += 1
with open(filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % filename)
К сожалению, данные, которые были сохранены, не полны - например, в этом проекте , вот как это выглядит, когда я смотрю их с помощью своего браузера:
это именно та часть, которая отсутствует на моей загруженной веб-странице (присутствует все, что находится ниже этой части страницы).
Что я могу сделать, чтобы получить полные данные? Спасибо