Ami*_*pta 7 python screen-scraping mechanize scrapy
我正在使用Scrapy抓取一个网站,该网站需要启用烹饪和java脚本.我认为我不必实际处理javascript.我只需假装javascript已启用.
以下是我尝试过的方法:1)通过以下设置启用Cookie
COOKIES_ENABLED = True
COOKIES_DEBUG = True
Run Code Online (Sandbox Code Playgroud)
2)使用下载中间件进行cookie
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware':700
}
Run Code Online (Sandbox Code Playgroud)
3)发送'X-JAVASCRIPT-ENABLED':'True'
DEFAULT_REQUEST_HEADERS={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'X-JAVASCRIPT-ENABLED': 'True'
}
Run Code Online (Sandbox Code Playgroud)
但他们都不和我合作.你能提出任何想法或给我指点吗?
提前感谢您的回复.
你应该尝试使用scrapyjs的Splash JS引擎.以下是如何在蜘蛛项目中进行设置的示例:
SPLASH_URL = 'http://192.168.59.103:8050'
DOWNLOADER_MIDDLEWARES = {
'scrapyjs.SplashMiddleware': 725,
}
Run Code Online (Sandbox Code Playgroud)
刮痧中心是Scrapy背后的同一家公司,它具有特殊的实例来运行你的蜘蛛启用飞溅.
然后屈服SplashRequest
而不是Request
像你这样的蜘蛛:
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
start_urls = ["http://example.com", "http://example.com/foo"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse,
endpoint='render.html',
args={'wait': 0.5},
)
def parse(self, response):
# response.body is a result of render.html call; it
# contains HTML processed by a browser.
# …
Run Code Online (Sandbox Code Playgroud)
Scrapy 不支持 java 脚本。
但
您可以使用 Scrapy 的其他库来执行 JS ,例如 Webkit、Selenium 等,
并且您不需要启用 cookie ( COOKIES_ENABLED = True
),甚至不需要添加DOWNLOADER_MIDDLEWARES
,settings.py
因为它们已经在默认的 scrapy 设置中可用
归档时间: |
|
查看次数: |
4477 次 |
最近记录: |