自然语言处理:scrapy爬取关键词信息(二)

scrapy基础博客:Python之scrapy模块基础解析(一)
自然语言处理:分词(断词)与关键词提取方法(一)
自然语言处理:问答语料生成词汇表,词转向量(三)

1 网页分析

1.0 关键词提取网页分析

打开网页:https://www.baidu.com/s?wd=自然语言处理
自然语言处理:scrapy爬取关键词信息(二)_第1张图片

图1.0 网页信息分析

(1) 打开关键词搜索页面,找到含有关键词如自然语言处理有效链接标签;
(2) 依据链接位置,反推链接所在的html层次,获取该层次的内容,实例的层次为div class="result c-container "中h3的a标签.

response.xpath('//div[contains(@class, "c-container")]/h3/a/@href')

其中@为提取属性内容;

1.2 分页网页分析

自然语言处理:scrapy爬取关键词信息(二)_第2张图片

图1.2 第一页分页

自然语言处理:scrapy爬取关键词信息(二)_第3张图片

图1.3 第二页分页

(1) 分页信息在块div id="page"的a标签中,a的href只有上一页和下一页有class=“n”,因为class相同,所以不能直接通过class区分连接,因此获取所有分页链接的list,提取列表最后一个元素,即为下一页的链接,可持续获取数据;
(2) 依据下一页的链接,设置循环获取数据,使用follow函数即可;

next_page = response.xpath('//div[@id="page"]/a/@href')
next_page = next_page[-1]
response.follow(next_page, self.parse)

2 crawl爬取信息

  • Demo
    baidu.py
import scrapy
from w3lib.html import remove_tags

class BaiduSearchSpider(scrapy.Spider):
	# spider名称
	name = "info_search"
	allowed_domains = ["baidu.com"]
	# 起始链接
	start_urls = [
		"https://www.baidu.com/s?wd=自然语言处理"
	]
	# 解析函数
	def parse(self, response):
		# 关键词链接
		hrefs = response.xpath('//div[contains(@class, "c-container")]/h3/a/@href').extract()
		# 关键词信息链接列表
		containers = response.selector.xpath('//div[contains(@class, "c-container")]')
		print("Containers: {}".format(containers))
		for container in containers:
			# 关键词链接
			href = container.xpath('h3/a/@href').extract()[0]
			# 标题
			title = remove_tags(container.xpath('h3/a').extract()[0])
			# 摘要
			c_abstract = container.xpath('div/div/div[contains(@class, "c-abstract")]').extract()
			abstract = ""
			if len(c_abstract) > 0:
				# 删除不必要的标签
				abstract = remove_tags(c_abstract[0])
			# 爬取链接信息
			request = scrapy.Request(href, callback=self.parse_url)
			request.meta['title'] = title
			request.meta['abstract'] = abstract
			yield request
		# 分页信息
		next_page = response.xpath('//div[@id="page"]/a/@href').extract()
		next_page = next_page[-1]
		if next_page is not None:
			yield response.follow(next_page, self.parse)
	# 输出信息
	def parse_url(self, response):
		print("URL: {}".format(response.url))
		print("Title: {}".format(response.meta['title']))
		print("Abstract: {}".format(response.meta['abstract']))
		# 含关键词信息的内容,使用remove_tags删除标签标记如
content = remove_tags(response.xpath('//body').extract()[0]) print("Content length: {}".format(len(content))) print("Content: {}".format(content))
  • Run
scrapy crawl info_search -o question.json -t json
  • Result
2019-02-14 14:25:20 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to  from 
2019-02-14 14:25:20 [scrapy.extensions.logstats] INFO: Crawled 13 pages (at 9 pages/min), scraped 0 items (at 0 items/min)
2019-02-14 14:25:23 [scrapy.core.engine] DEBUG: Crawled (200)  (referer: None)
URL: https://www.oschina.net/project/tag/305/nlp
Title: 自然语言处理 - 开源软件 - 开源中国
1、概括来说,NLP,除了NLU(图中红框部分),还包含理解之前的处理阶段、和理解之后的应用阶段。也就是说,NLU是NLP的子集——他们不是并集、更不是等价的概念。这里,是很多AI从业人员都容易混淆的,大家可以先记住这个概念关系:NLU是NLP的子集。

2、其他: 
1)左边最底部,是最基础的大数据、机器学习和语言学(Linguistics);

2)往上看,是知识图谱(Knowledge Graph),其中包含了实体图谱、注意力图谱和意图图谱。

3)再往上,左侧是语言理解(Language Understanding),右侧是语言生成(Language Generation)——

语言理解,包含了Query理解、文本理解、情感分析(Sentiment Analysis)等,还有词法(Lexical)、句法(Syntax)和语义(Semantic)等不同层次的分析。

语言生成,包含了写作、阅读理解等等。

3 总结

(1) 爬取关键词文本两步:获取关键信息链接,获取分页信息链接;
(2) 初步清洗数据:删除多余的标签如
使用remove_tags()方法;

  • 拓展:
    Python之scrapy模块基础解析(一)
    自然语言处理:分词(断词)与关键词提取方法(一)
    自然语言处理:问答语料生成词汇表,词转向量(三)

[参考文献]
[1]https://docs.scrapy.org/en/latest/intro/tutorial.html?highlight=response.follow
[2]http://www.scrapyd.cn/doc/179.html
[3]http://www.shareditor.com/blogshow/?blogId=76
[4]https://blog.csdn.net/Xin_101/article/details/87165132


你可能感兴趣的:(#,AI,ABC,#,Python三包,scrapy,爬取关键词信息,python)