抓取动态网页(输入关键词爬取某个某个专利网站在关键词下的专利说明)
优采云 发布时间: 2021-10-04 10:28抓取动态网页(输入关键词爬取某个某个专利网站在关键词下的专利说明)
前言:最近除了学习和工作,异性朋友需要爬一个动态网页。输入关键词,抓取网站的专利和关键词下的一些专利说明。以前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
然后会自动生成如下形式的文件夹:
图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是name的值,是tutorial/spider文件夹下新建的文件中DmozSpider类中的重要变量之一。
可以开始爬行了。
#============================================
朋友们:
介绍了爬取动态网站的部分内容,并在github上分享了完整的项目代码。(先下载代码,对照代码看文档)
它的任务是动态捕获页面信息。
Halo大人为了自己的任务,修改了自己的/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()
有些东西可以分析,但还不够。我们需要继续分析返回的动态页面的源代码,更改提取器,选择器(尚未启动)
) 为了得到想要的结果。selenium 包似乎没用。
#============================================
卤大师参考的一些资料:
刮刮乐官网:
硒官网:
刮板选择器:#topics-selectors
博友博客:
博友博客:
博友博客(硒):
访问问题: