Pra*_*ain 36 python scrapy web-scraping
免责声明:我在StackOverflow上看过很多其他类似的帖子,并尝试以同样的方式做到这一点,但他们似乎没有在这个网站上工作.
我正在使用Python-Scrapy从koovs.com获取数据.
但是,我无法获得动态生成的产品大小.具体来说,如果有人可以通过此链接的下拉菜单指导我获取"不可用"尺寸标签,我将不胜感激.
我能够静态获取大小列表,但这样做我只获得大小列表,但不能获得哪些大小.
ale*_*cxe 43
你也可以解决它ScrapyJS(不需要selenium和真正的浏览器):
该库使用Splash提供Scrapy + JavaScript集成.
按照安装说明Splash和ScrapyJS,启动飞溅泊坞窗容器:
$ docker run -p 8050:8050 scrapinghub/splash
Run Code Online (Sandbox Code Playgroud)
将以下设置放入settings.py:
SPLASH_URL = 'http://192.168.59.103:8050'
DOWNLOADER_MIDDLEWARES = {
'scrapyjs.SplashMiddleware': 725,
}
DUPEFILTER_CLASS = 'scrapyjs.SplashAwareDupeFilter'
Run Code Online (Sandbox Code Playgroud)
这是您的示例蜘蛛能够查看大小可用性信息:
# -*- coding: utf-8 -*-
import scrapy
class ExampleSpider(scrapy.Spider):
name = "example"
allowed_domains = ["koovs.com"]
start_urls = (
'http://www.koovs.com/only-onlall-stripe-ls-shirt-59554.html?from=category-651&skuid=236376',
)
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, self.parse, meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 0.5}
}
})
def parse(self, response):
for option in response.css("div.select-size select.sizeOptions option")[1:]:
print option.xpath("text()").extract()
Run Code Online (Sandbox Code Playgroud)
这是打印在控制台上的内容:
[u'S / 34 -- Not Available']
[u'L / 40 -- Not Available']
[u'L / 42']
Run Code Online (Sandbox Code Playgroud)
据我所知,大小可用性是在浏览器中执行的javascript中动态确定的.Scrapy不是浏览器,无法执行javascript.
如果您可以切换到selenium浏览器自动化工具,这里有一个示例代码:
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Firefox() # can be webdriver.PhantomJS()
browser.get('http://www.koovs.com/only-onlall-stripe-ls-shirt-59554.html?from=category-651&skuid=236376')
# wait for the select element to become visible
select_element = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.select-size select.sizeOptions")))
select = Select(select_element)
for option in select.options[1:]:
print option.text
browser.quit()
Run Code Online (Sandbox Code Playgroud)
它打印:
S / 34 -- Not Available
L / 40 -- Not Available
L / 42
Run Code Online (Sandbox Code Playgroud)
请注意,Firefox您可以使用其他网络驱动程序(如Chrome或Safari)代替您.还可以选择使用无头PhantomJS浏览器.
如果需要,您还可以将Scrapy与Selenium结合使用,请参阅:
| 归档时间: |
|
| 查看次数: |
37432 次 |
| 最近记录: |