我尝试使用以下scrappy的spider从https://www.marinetraffic.com/en/ais/details/ships/imo:9829069/中提取数据,然后将响应保存到file.html。
# -*- coding: utf-8 -*-
import scrapy
from fake_useragent import UserAgent
class MarinetrafficSpider(scrapy.Spider):
name = 'marinetraffic'
allowed_domains = ['marinetraffic.com']
ua = UserAgent()
ua.update()
def start_requests(self):
urls = [
'https://www.marinetraffic.com/en/ais/details/ships/imo:9829069/'
]
headers= {'User-Agent': self.ua['google chrome'] }
for url in urls:
yield scrapy.Request(url, callback=self.parse, headers=headers)
def parse(self, response):
with open('file.html', 'wb') as f:
f.write(response.body)
self.log('Saved file')
但我不接受预期的React。返回的响应位于file.html中
请检查调试结果。
我需要对上面的代码做什么修改,以使返回的响应与我从浏览器获取的响应相同?
我会通知你的。
1条答案
按热度按时间wmvff8tz1#
您看不到任何内容的原因是网站是通过JavaScript呈现的。换句话说,MarineTraffic服务器向您发送一个非常基本的HTML页面,沿着一个JS脚本,该脚本将加载内容,构造并显示所需的HTML。
为了获得完整的HTML,以及您正在寻找的数据,您需要模拟真实的浏览器。如果你正在使用Python,你可以看看Selenium,沿着Chromedriver。
但要注意,上次我检查(3年前)MarineTraffic有一个非常强大的反爬虫保护,这将阻止你后,几个页面访问与 selenium + chrome 驱动程序设置。