我正在使用Scrapy抓取网页。当您点击某个按钮时,我只需弹出一些我需要的信息(当然,点击后也会出现在HTML代码中)。
我发现Scrapy可以处理表单(如登录),如here所示。但问题是没有任何形式可以填写,所以这不是我需要的。
如何只需点击一个按钮,然后显示我需要的信息?
我是否必须使用像mechanize或lxml这样的外部库?
答案 0 :(得分:39)
Scrapy无法解释javascript。
如果您绝对必须与页面上的javascript进行互动,那么您希望使用Selenium。
如果使用Scrapy,问题的解决方案取决于按钮的作用。
如果它只显示以前隐藏的内容,您可以毫无问题地抓取数据,它不会出现在浏览器中,HTML仍然存在。
如果在按下按钮时通过AJAX动态获取内容,最好的办法是查看使用Firebug等工具按下按钮时发出的HTTP请求。然后,您可以直接从该URL请求数据。
我是否必须使用像mechanize或lxml这样的外部库?
如果你想解释javascript,是的,你需要使用不同的库,尽管这两个都不符合要求。他们都不知道关于javascript的任何事情。硒是要走的路。
如果您可以提供正在抓取的页面的网址,我可以查看一下。
答案 1 :(得分:13)
Selenium
浏览器提供了非常好的解决方案。以下是一个示例(pip install -U selenium
):
from selenium import webdriver
class northshoreSpider(Spider):
name = 'xxx'
allowed_domains = ['www.example.org']
start_urls = ['https://www.example.org']
def __init__(self):
self.driver = webdriver.Firefox()
def parse(self,response):
self.driver.get('https://www.example.org/abc')
while True:
try:
next = self.driver.find_element_by_xpath('//*[@id="BTN_NEXT"]')
url = 'http://www.example.org/abcd'
yield Request(url,callback=self.parse2)
next.click()
except:
break
self.driver.close()
def parse2(self,response):
print 'you are here!'
答案 2 :(得分:0)
要正确和完全使用JavaScript,您需要一个完整的浏览器引擎,这只能通过Watir / WatiN / Selenium等实现。