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

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

1 网页分析

1.0 关键词提取网页分析

打开网页:https://www.baidu.com/s?wd=自然语言处理
在这里插入图片描述

图1.0 网页信息分析

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

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

其中@为提取属性内容;

1.2 分页网页分析

在这里插入图片描述

图1.2 第一页分页

在这里插入图片描述

图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删除标签标记如<br>
		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 <GET https://data.aliyun.com/product/nlp> from <GET http://www.baidu.com/link?url=T37RDPpOypeFv0w6xf43-m8QlMrhF98T_XeNWPpGc4fbh0zJysoakdRVr81Od7oX>
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) <GET https://www.oschina.net/project/tag/305/nlp> (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) 初步清洗数据:删除多余的标签如<br>使用remove_tags()方法;


[参考文献]
[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


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,我是AI语言模型,无法提供封装好的python代码,但是我可以提供Scrapy微博爬虫的基本思路和代码示例: Scrapy微博爬虫的基本思路: 1. 登录微博 2. 根据关键词搜索微博,获取微博列表 3. 遍历微博列表,提取微博的相关信息,如微博ID、微博内容、发布时间、点赞数、转发数、评论数、作者信息等 4. 如果有下一页,则继续爬取下一页的微博列表,重复2-3步骤 5. 将提取的微博信息保存到本地或远程数据库中 Scrapy微博爬虫的代码示例: 1. 在命令行中创建一个Scrapy项目: scrapy startproject weibo 2. 在weibo/spiders目录下创建一个名为weibospider.py的爬虫文件: import scrapy from scrapy.http import Request class WeiboSpider(scrapy.Spider): name = "weibo" allowed_domains = ["weibo.com"] start_urls = [ "https://weibo.com/" ] def start_requests(self): login_url = 'https://login.weibo.cn/login/' yield Request(url=login_url, callback=self.login) def login(self, response): # 在这里实现微博登录的逻辑 # ... # 登录成功后,调用parse方法开始爬取微博 yield Request(url=self.start_urls[0], callback=self.parse) def parse(self, response): # 在这里实现根据关键词搜索微博的逻辑 # 从搜索结果页面获取微博列表 # ... # 遍历微博列表,提取微博的相关信息 for weibo in weibo_list: weibo_id = weibo.get('id') weibo_content = weibo.get('content') publish_time = weibo.get('publish_time') likes = weibo.get('likes') reposts = weibo.get('reposts') comments = weibo.get('comments') author = weibo.get('author') # 将提取的微博信息保存到本地或远程数据库中 # ... # 如果有下一页,则继续爬取下一页的微博列表 next_page = response.xpath('//a[text()="下一页"]/@href').extract_first() if next_page: yield Request(url=next_page, callback=self.parse) 3. 在命令行中运行爬虫: scrapy crawl weibo 以上是一个简单的Scrapy微博爬虫示例,具体实现需要根据实际情况进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值