现在的位置: 主页 > 联系方式 > 文章正文

python scrapy爬取动态页面

作者:成都昌德装饰工程有限公司 来源:www.cdchangde.com 发布时间:2017-09-04 19:19:14
python scrapy爬取动态页面

preface:最近学习工作之外,有个异性朋友需要爬取动态网页的要求,输入关键词爬取某个专利网站在该关键词下的一些专利说明。以往直接python urllib2可破,但是那只是对于静态网页可破,但是对于用js等其他的生成的动态网页的话,则貌似不行(没试过)。然后在网上找了些资料,发现scrapy结合selenium包好像可以。(之所以这么说,暂时卤主也还没实现,先记录下来。)

#=====================根据官网中简单的介绍作个人理解========================

首先,安装scrapy,selenium两个包:

卤主在ubuntu下,并且已经安装好了anaconda和pip以及easy_intasll,所以直接用pip安装一步到位(或者easy_install):

pip install -U selenium pip install Scrapy easy_install -U selenium easy_install Scrapy

其次,需要用scrapy新建项目,在终端运行如下命令新建项目:

scrapy startproject tutorial 则自动生成如下形式的文件夹:

Figure 1:新建项目后的文件夹

再次,开始编写项目:

在items.py文件中需要定义一些变量:

import scrapy class DmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field()
在文件夹tutorial/spiders下新建dmoz_spider.py文件:

import scrapy class DmozSpider(scrapy.Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls = [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self, response): filename = response.url.split("/")[-2] with open(filename, 'wb') as f: f.write(response.body) 在该文件中需要定义三个变量,其一为name,start_urls,parse这三个变量。

最后,在最外层文件夹下终端运行:

scrapy crawl dmoz
dmoz为文件夹tutorial/spiders下新建的文件中DmozSpider类中重要的变量之一name的值。

便能开始爬取。

#=============================================

博友:http://chenqx.github.io/2014/12/23/Spider-Advanced-for-Dynamic-Website-Crawling/

介绍了抓取动态网站的一些内容,并且在github上共享了完整的项目代码。(先下载代码,对着代码看文档)

其gouwu.sogou.com任务为动态抓取页面信息。

卤主针对自己的任务,更改其gouwu.sogou.com/etao/lstData.py文件,里面lstData类lst列表变量里面为搜索的关键词,传入到spider.py文件,采集软件,组成url,开始爬取。

分析博友的代码没找到爬取下来的动态页面信息存在哪里的代码,

在spider.py文件中加入自己的代码:

def parse(self, response): #crawl all display page for link in self.link_extractor['page_down'].extract_links(response): yield Request(url = link.url, callback=self.parse) #browser self.browser.get(response.url) time.sleep(5) # get the data and write it to scrapy items etaoItem_loader = ItemLoader(item=EtaoItem(), response = response) url = str(response.url) etaoItem_loader.add_value('url', url) etaoItem_loader.add_xpath('title', self._x_query['title']) etaoItem_loader.add_xpath('name', self._x_query['name']) etaoItem_loader.add_xpath('price', self._x_query['price']) #==================================== # for link in self.link_extractor['page_down'].extract_links(response): # yield Request(url = link.url, callback = self.parse_detail) for sel in response.xpath('//ul/li'): title = sel.xpath('a/text()').extract() link2 = sel.xpath('a/@href').extract() desc = sel.xpath('text()').extract() for i in title: print i, for j in link2: print j,"+++++++++++++" #==================================== yield etaoItem_loader.load_item()
能分析一些东西,但还不够,还需继续分析返回来的动态页面的源代码,更改抽取器extractor,选择器selector(还未开始),以便得到想要的结果。selenium包好像没用上。

#=============================================

卤主参考的一些资料:

scrapy官网:http://doc.scrapy.org/en/latest/intro/tutorial.html

selenium官网:http://selenium-python.readthedocs.org/

scrapy选择器:http://doc.scrapy.org/en/0.24/topics/selectors.html#topics-selectors

博友博客:http://chenqx.github.io/2014/12/23/Spider-Advanced-for-Dynamic-Website-Crawling/
博友博客:http://chenqx.github.io/2014/11/09/Scrapy-Tutorial-for-BBSSpider/

博友博客(selenium):http://www.cnblogs.com/fnng/archive/2013/05/29/3106515.html

存取问题:http://my.oschina.net/HappyRoad/blog/173510

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉SEO http://www.feimao666.com

上一篇:新浪微博团队内斗导致错过商业化关键年 下一篇:最后一页