我正在使用Scrapy
来抓取website (proptiger.com)中的HTML
内容。但是当我在响应中搜索任何元素时,它找不到任何元素。
页面上有 2,3 BHK 文字,XPath
//div[@class="spec-value f16"]
可以访问该文字。但是当我使用response.xpath('//div[@class="spec-value f16"]')
时,它不会返回上述文本。
它适用于https://wiki.python.org/moin/BeginnersGuide等常规网站,但在 99acres.com , proptiger.com 等网站上工作
任何帮助都会有所帮助。
答案 0 :(得分:1)
使用scrapy shell
正在搜索的itemprop xpath,因为@furas说,其中一些内容是由JavaScript生成的。您可以通过将Selenium添加到scrapy来获得此内容。 Selenium使用URL,使用Web浏览器呈现它,scrapy可以正常访问生成的HTML。下面的代码是一个让您开始使用Firefox的框架,但它也适用于其他浏览器。我建议也要使用Firebug for Firefox,这对于练习xpath很有用。
import scrapy
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
from scrapy.http import TextResponse
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
class SearchSpider(scrapy.Spider):
name = "search"
allowed_domains = ['www.somedomain.com']
start_urls = ['https://www.somewebsite.com']
def __init__(self, filename=None):
# wire us up to selenium
self.driver = webdriver.Firefox()
dispatcher.connect(self.spider_closed, signals.spider_closed)
def spider_closed(self, spider):
self.driver.close()
def parse(self, response):
item = someItem()
# Load the current page into Selenium
self.driver.get(response.url)
try:
WebDriverWait(self.driver, 30).until(EC.presence_of_element_located((By.XPATH, '//span[@itemprop="name"]')))
except TimeoutException:
item['status'] = 'timed out'
# Sync scrapy and selenium so they agree on the page we're looking at then let scrapy take over
resp = TextResponse(url=self.driver.current_url, body=self.driver.page_source, encoding='utf-8')
# scrape as normal
答案 1 :(得分:0)
本教程将指导您完成以下任务:
Scrapy用Python编写。如果您是该语言的新手,则可能首先要了解一下该语言的外观,以充分利用Scrapy。