网站
查看网站你可以看到你想要抓取的内容是由 JavaScript 驱动的,这增加了通过 API 端点通过 AJAX 请求加载数据的机会。使用 chrome 开发工具,您可以检查在 XHR 中加载了 5 个请求。但是,这个 API https://onlinelibrary.ectrims-congress.eu/ectrims/listing/events/banners 将在传递 Scrapy 中的 headers、cookies 和 body 所需的参数后为您提供所需的数据。
代码
from scrapy import Request
class Ectrims(scrapy.Spider):
name = 'library'
headers = {
"Connection": "keep-alive",
"sec-ch-ua": "\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"91\", \"Chromium\";v=\"91\"",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"sec-ch-ua-mobile": "?0",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "https://onlinelibrary.ectrims-congress.eu",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://onlinelibrary.ectrims-congress.eu/ectrims/",
"Accept-Language": "en-US,en;q=0.9"
}
cookies = {
"PHPSESSID": "if994kqobo2l80nk1ki7q233i5",
"_ga": "GA1.2.212877690.1624208120",
"_gid": "GA1.2.291339791.1624208120",
"intercom-id-aucjjau5": "bdcafc49-97d0-42fb-b61e-46c74cfed3b0",
"cp_user_200": "{\"1\":0}"
}
body = 'menu=6&browseby=3&sortby=2&media=3&ce_id=1428&getpage=1'
def start_requests(self):
url = 'https://onlinelibrary.ectrims-congress.eu/ectrims/listing/events/banners'
yield Request(url=url, method='POST', cookies=self.cookies, headers=self.headers, body=self.body, callback=self.parse)
def parse(self, response):
print(response.body)