标签:scrapy python selenium 动态网站 爬取
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这三个变量。
最后,在最外层文件夹下终端运行:
<span style="font-size:18px;">scrapy crawl dmoz</span>
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()
#=============================================
卤主参考的一些资料:
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
标签:scrapy python selenium 动态网站 爬取
原文地址:http://blog.csdn.net/u010454729/article/details/46539307