我正在尝试编写一个在域:https://www.ghcjobs.apply2jobs.com...上爬过所有结果页的废蜘蛛。代码应该做三件事:
(1)浏览1-1000页。这些页面是完全相同的,只是通过URL的最后一部分来区分:amp;CurrentPage=#。在
(2)跟踪结果表内的每个链接,其中包含招聘公告,其中链接的class=SearchResult。我在这里的任何链接都不在这里,所以这些都不是我的麻烦。在
(3)将工作描述页面上显示的信息存储在key:值JSON格式。(这一部分基本上起作用)
我以前使用过scrapy和crawlspider,使用'rule=[rule(LinkExtractor(allow='方法递归地解析一个页面,以找到与给定regex模式匹配的所有链接)。我现在在第1步中被难住了,在上千个结果页面中爬行。在
下面是我的蜘蛛代码:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.http.request import Request
from scrapy.contrib.linkextractors import LinkExtractor
from genesisSpider.items import GenesisJob
class genesis_crawl_spider(CrawlSpider):
name = "genesis"
#allowed_domains = ['http://www.ghcjobs.apply2jobs.com']
start_urls = ['https://www.ghcjobs.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.returnToResults&CurrentPage=1']
#allow &CurrentPage= up to 1000, currently ~ 512
rules = [Rule(LinkExtractor(allow=("^https://www.ghcjobs.apply2jobs.com/ProfExt/
index.cfm\?fuseaction=mExternal.returnToResults&CurrentPage=[1-1000]$")), 'parse_inner_page')]
def parse_inner_page(self, response):
self.log('===========Entrered Inner Page============')
self.log(response.url)
item = GenesisJob()
item['url'] = response.url
yield item
下面是spider的输出,上面切掉了一些执行代码:
^{pr2}$目前,我被困在这个项目的目标(1)。如你所见,我的蜘蛛只在起始网址页面上爬行。我的正则表达式应该是针对正确的页面导航按钮,因为我已经测试了正则表达式。我的回调函数parse_inner_page正在工作,如我插入的调试注释所示,但仅在第一页上。我是不是用错了“规则”?我在想,也许网页是HTTPS的原因。。。在
作为修补解决方案的一种方法,我尝试使用对结果的第二页的手动请求;但这不起作用。这也是密码。在
Request("https://www.ghcjobs.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.returnToResults&CurrentPage=2", callback = 'parse_inner_page')
有人能提供指导吗?有没有更好的办法?我从上周五就开始研究这个问题。非常感谢你。在
更新:我已经解决了这个问题。问题是我使用的起始网址。在
start_urls = ['https://www.ghcjobs.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.returnToResults&CurrentPage=1']
指向一个post form提交页面,该页面是单击This页面上的“搜索”按钮的结果。它在客户端运行javascript,向服务器提交一个表单,服务器报告完整的作业板,第1-512页。但是,还有另一个硬编码的URL,它显然不需要使用任何客户端javascript就可以调用服务器。所以现在我的起始网址是
start_urls = ['https://www.ghcjobs.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.searchJobs']
一切都回到正轨!以后,请检查是否有任何javascript独立的url用于调用服务器资源。在
你真的和你一样看待网页吗?现在,越来越多的网站是用Javascript,Ajax。。这些动态内容可能需要一个功能齐全的浏览器才能完全填充。然而,Nutch和Scrapy都无法处理这些现成的问题。在
首先,你需要确保你感兴趣的web内容可以被scrapy检索到。有几种方法可以做到这一点。我通常使用
urllib2
和beautifulsoup4
来快速尝试。你的起始页没有通过我的测试。在正如您所看到的,“没有符合您的条件的结果!” 我想您可能需要弄清楚为什么没有填充内容。饼干?发布而不是获取?用户代理等
另外,您可以使用scrapyparse命令来帮助您调试。例如,我经常使用这个命令。在
^{pr2}$其他一些稀薄的commands,也许硒对以后的发展有帮助。在
在这里,我使用iPython中运行scrapy shell来检查您的起始url,而且我在浏览器中看到的第一条记录包含Englewood,它不存在于scrapy抓取的html中
更新:
你所做的只是一个非常琐碎的刮擦工作,你真的不需要刮擦,这有点过分了。以下是我的建议:
相关问题 更多 >
编程相关推荐