我正在通过Scrapy使用ASP.NET编程来浏览某些目录。
要爬网的页面编码如下:
javascript:__doPostBack('ctl00$MainContent$List','Page$X')
其中X是1到180之间的整数。MainContent参数始终相同。我不知道如何爬进这些。我希望可以像allow=('Page$')
或一样简单地向SLE规则中添加一些内容attrs='__doPostBack'
,但是我想我必须更加棘手才能从javascript“链接”中提取信息。
如果更容易从JavaScript代码中“取消屏蔽”每个绝对链接并将其保存到csv,则可以使用该csv将请求加载到新的抓取工具中,也可以。
这种分页并不是看起来那么简单。解决它是一个有趣的挑战。以下是有关该解决方案的一些重要说明:
Request.meta
BaseSpider
因为分页涉及一些逻辑headers
假装成为真正的浏览器很重要FormRequest
s很重要,dont_filter=True
因为我们基本上是POST
向相同的URL发出请求,但参数不同编码:
import re
from scrapy.http import FormRequest
from scrapy.spider import BaseSpider
HEADERS = {
'X-MicrosoftAjax': 'Delta=true',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36'
}
URL = 'http://exitrealty.com/agent_list.aspx?firstName=&lastName=&country=USA&state=NY'
class ExitRealtySpider(BaseSpider):
name = "exit_realty"
allowed_domains = ["exitrealty.com"]
start_urls = [URL]
def parse(self, response):
# submit a form (first page)
self.data = {}
for form_input in response.css('form#aspnetForm input'):
name = form_input.xpath('@name').extract()[0]
try:
value = form_input.xpath('@value').extract()[0]
except IndexError:
value = ""
self.data[name] = value
self.data['ctl00$MainContent$ScriptManager1'] = 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$agentList'
self.data['__EVENTTARGET'] = 'ctl00$MainContent$List'
self.data['__EVENTARGUMENT'] = 'Page$1'
return FormRequest(url=URL,
method='POST',
callback=self.parse_page,
formdata=self.data,
meta={'page': 1},
dont_filter=True,
headers=HEADERS)
def parse_page(self, response):
current_page = response.meta['page'] + 1
# parse agents (TODO: yield items instead of printing)
for agent in response.xpath('//a[@class="regtext"]/text()'):
print agent.extract()
print "------"
# request the next page
data = {
'__EVENTARGUMENT': 'Page$%d' % current_page,
'__EVENTVALIDATION': re.search(r"__EVENTVALIDATION\|(.*?)\|", response.body, re.MULTILINE).group(1),
'__VIEWSTATE': re.search(r"__VIEWSTATE\|(.*?)\|", response.body, re.MULTILINE).group(1),
'__ASYNCPOST': 'true',
'__EVENTTARGET': 'ctl00$MainContent$agentList',
'ctl00$MainContent$ScriptManager1': 'ctl00$MainContent$UpdatePanel1|ctl00$MainContent$agentList',
'': ''
}
return FormRequest(url=URL,
method='POST',
formdata=data,
callback=self.parse_page,
meta={'page': current_page},
dont_filter=True,
headers=HEADERS)
本文向大家介绍python爬虫爬取网页数据并解析数据,包括了python爬虫爬取网页数据并解析数据的使用技巧和注意事项,需要的朋友参考一下 1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。 只要浏览器能够做的事情,原则上,爬虫都能够做到。 2.网络爬虫的功能 网络爬虫可以代替手工做很多事情,比如可以
我看到了一些像http://homes.mitula.ph/homes/makati这样的搜索网站,我想知道他们是如何抓取其他网站(如、和)中的数据并将其显示到他们的站点上的。 我正在考虑使用Solr索引数据,使用Nutch抓取数据。我是一个新的网页抓取和索引,目前为止,我只能抓取一个网页的内容。 Solr Nutch能做那种爬行吗?怎么做的?
问题内容: 我是新手。我正在使用获取对象列表并将其显示在第一页上的服务。然后根据单击的对象,在下一页上设置选项卡标题。但是,当我刷新页面时,列表的范围丢失了,并且选项卡头引发了异常,导致页面无法显示信息。即使刷新第二页,是否可以保留上一个屏幕上单击了哪个对象的信息? 问题答案: 您可以使用角度本地存储 角度本地存储 示例如何使用它: 使用本地存储的示例
问题内容: 是否可以在JSP页面上使用,然后在HTML Submit上使用在中获得相同的请求属性? 问题答案: 不能。不幸的是,Request对象仅在页面加载完成之前才可用-一旦完成,您将丢失其中的所有值,除非它们存储在某个位置。 如果要通过请求保留属性,则需要: 在表单中有一个隐藏的输入,例如。然后,它将在servlet中作为请求参数提供。 将其放在会话中(请参阅-在JSP 中,它很容易使用)
我必须在ajax请求后动态呈现一个表,并希望按配置名称对行进行分组。在数据表中使用rowspan时,仅呈现简单表,并且存在控制台错误: jquery。数据表。min.js:24未捕获的TypeError:无法设置未定义的属性“\u DT\u CellIndex” 我使用handlebars.js填充表模板 日期:https://cdn.datatables.net/1.10.19/js/jquer
我在使用测试时遇到空指针异常。将()方法记录到页面对象中。 我的扩展报告测试在TestBase类的“@Beforemethod”中定义。因此,我需要访问test.log();进入Page Object例如。LoginPage.java.它在测试用例级别运行良好,即。LoginPageTest.java 下面是登录页面。java(这是一个页面对象类) 正如您在LoginPage类中看到的,我使用了T
问题内容: 我正在尝试在应用程序的结帐过程中在页面之间传递数据,但是它无法正常工作。我已经读了一些书,大多数人建议使用服务,但是唯一的问题是,刷新页面(用户单击刷新或稍后再返回)时,该服务中的所有数据都会消失。这是有道理的,因为服务中的数据并不是永久性的,而是会引起问题。 所以问题是:如何在angularJS中的页面之间传递数据,并且仍然保持页面刷新后传递的数据? 到目前为止,这是我的代码(尝试使
我在看一些旧代码,我试图重写它,但我遇到了一个问题。 这是运行良好的旧代码: 但是我使用的是Spring Data 2,其中的页面映射方法采用了一个函数而不是一个转换器,所以我不知道如何重写这个。 我读了这个主题:如何映射页面 有人能用SpringData2方法(Function而不是Converter)翻译上面的代码片段吗?