我试图在Scrapy及其xpath选择器的帮助下抓取一个非常简单的网页,但由于某些原因,我拥有的选择器在Scrapy中不起作用,但在其他xpath实用程序中却起作用
我正在尝试解析此html代码段:
<select id="chapterMenu" name="chapterMenu">
<option value="/111-3640-1/20th-century-boys/chapter-1.html" selected="selected">Chapter 1: Friend</option>
<option value="/111-3641-1/20th-century-boys/chapter-2.html">Chapter 2: Karaoke</option>
<option value="/111-3642-1/20th-century-boys/chapter-3.html">Chapter 3: The Boy Who Bought a Guitar</option>
<option value="/111-3643-1/20th-century-boys/chapter-4.html">Chapter 4: Snot Towel</option>
<option value="/111-3644-1/20th-century-boys/chapter-5.html">Chapter 5: Night of the Science Room</option>
</select>
Scrapy parse_item代码:
def parse_item(self, response):
itemLoader = XPathItemLoader(item=MangaItem(), response=response)
itemLoader.add_xpath('chapter', '//select[@id="chapterMenu"]/option[@selected="selected"]/text()')
return itemLoader.load_item()
Scrapy不会从中提取任何文本,但是如果我得到相同的xpath和html代码片段并在此处运行它,则效果很好。
如果我使用这个xpath:
//select[@id="chapterMenu"]
我得到正确的元素,但是当我尝试访问其中的选项时却什么也没有
Scrapy仅对URL执行GET请求,它不是Web浏览器,因此无法运行JavaScript。因此,仅Scrapy不足以抓取动态网页。
另外,您将需要Selenium之类的东西,它基本上为您提供了多个Web浏览器及其功能的接口,其中之一是能够运行JavaScript并获取客户端生成的HTML。
以下是如何执行此操作的摘要:
from Project.items import SomeItem
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from selenium import webdriver
import time
class RandomSpider(CrawlSpider):
name = 'RandomSpider'
allowed_domains = ['random.com']
start_urls = [
'http://www.random.com'
]
rules = (
Rule(SgmlLinkExtractor(allow=('some_regex_here')), callback='parse_item', follow=True),
)
def __init__(self):
CrawlSpider.__init__(self)
# use any browser you wish
self.browser = webdriver.Firefox()
def __del__(self):
self.browser.close()
def parse_item(self, response):
item = SomeItem()
self.browser.get(response.url)
# let JavaScript Load
time.sleep(3)
# scrape dynamically generated HTML
hxs = Selector(text=self.browser.page_source)
item['some_field'] = hxs.select('some_xpath')
return item
主要内容:静态网页,动态网页本节我们了解一下静态网页和动态网页的相关概念。如果您熟悉前端语言的话,那么您可以快速地了解本节知识。 当我们在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定了页面类型,才方便后续对网页进行分析和程序编写。对于不同的网页类型,编写爬虫程序时所使用的方法也不尽相同。 静态网页 静态网页是标准的 HTML 文件,通过 GET 请求方法可以直接获取,文件的扩展名是 、 等,网面中
我可以看到请求消息被加入和出列,响应消息被加入和出列。但我有个例外, 我应该如何检索响应?
问题内容: 简短的问题:我需要使用Wicket将从数据库中提取的动态图像转换为URL,而无需将组件添加到显示页面(例如,使用NonCachingImage)。 完美的解决方案(我已在其他Framework中实现)只是创建一个页面,该页面将图像ID作为url参数并将图像呈现到响应流。不幸的是,Wicket的Page类扩展了MarkupContainer,它围绕MarkupStreams展开。Mark
我只是想看看在以下情况下最好的做法是什么。 这样dyno在不运行时就不会累积使用量,还是我就让它保持原样? 在这里做什么最好? 谢谢
从网页的主要构成来说,一个标准的网页一般有4个部分组成:内容、结构、表现和行为。 内容是网页中要传达的信息,包括文本、数据、图片、视频等,一般由HTML(XHTML)来完成,也就是页面中的各种页面元素对象,它们是被动态操纵的内容; 结构是使用结构化的方法对网页中用到的信息进行分类和整理,使内容更具条理性、逻辑性和易读性; 表现是使用表现技术对已经结构化的信息进行表现上的控制,如版式、文本大小、文本
主要内容:动态网页静态或平面的网页是指一个网页,其中所有的信息和材料都存储在网页文件中。 静态网页向所有用户显示不太经常改变的信息和数据。 在互联网技术中,超文本标记语言(HTML)是人们开始创建静态网页的第一语言或渠道。 HTML提供了文本,段落创建和换行符的风格。 但HTML的最重要的功能和特点是链接创建选项。 静态网页对于他们的材料和内容很有用,而这些内容很少需要修改或更新。 静态网站的优势 快速开发 低价开