网页新闻抓取( 简单的来说,对于爬取网页的内容来说的一些介绍)

优采云 发布时间: 2021-11-20 23:16

  网页新闻抓取(

简单的来说,对于爬取网页的内容来说的一些介绍)

  

  简单来说,对于爬取网页的内容:http在爬取过程中不需要输入账号密码,而https则需要输入账号和密码,以及密码带来的一系列问题帐户。因此,抓取https相对复杂。

  二、选的框架scarpy 2.1 介绍scrapy

  这里

  有Scarpy的简单框架介绍

  

  2.1.1 Scrapy结构2.1.2数据流

  数据流向由执行引擎控制,如图中各个步骤所示。

  * Step1:scrapy引擎首先获取初始URL(Requests)。

  * Step2:然后交给Scheduler调度Requests,请求下一个URL。

  * Step3:调度器将下一个请求返回给scrapy引擎

  * Step4:scrapy引擎通过Downloader Middlewares向下载器Downloader(process_request())发送请求。

  * Step5:Downloader Middlewares 完成网页下载后,会生成响应并通过 Downloader Middlewares 将其发送回scrapy 引擎(process_response())。

  * Step6:scrapy引擎收到Response后,通过Spider Middlewares发送给Spider做进一步处理。

  * Step7:Spider 处理完响应后,会将抓取的项目和新请求(链接在下一页)返回给抓取引擎。

  * Step8:crapy引擎将处理后的item发送到Item Pipelines,然后将Requests发送回Scheduler,请求下一个可能的URL进行爬取。

  * Step9:从step1开始重复上面的操作,直到Scheduler中没有多余的URL可以请求

  提示:解释第 7 步

  Spider 分析的结果有两种:

  * 一个是需要进一步爬取的链接,比如“下一页”的链接,会被发回给Scheduler;

  * 另一个是需要保存的数据。它们被发送到 Item Pipeline 进行后期处理(详细分析、过滤、存储等)。

  2.1.3 爬取过程第三部分,半年爬取中新网各种新闻

  我的环境是Python3.6+Scrapy,Windows,IDE:PyCharm

  3.1 创建一个scrapy项目**

  在命令行输入scrapy startproject qqnews

  会出现以下文件

  

  3.1.1 在qqnew.py中编写我们的主要爬虫代码**

  

  首先我们需要导入对应的文件

  from scrapy.spiders import Spider

from qqnews.items import QqnewsItem

  spider 会自动从 start_urls 抓取网页,可以收录多个 URL。

  并且默认调用parse函数,parse在蜘蛛抓取网页后默认调用callback。

  提示:因为我们要抓取半年的新闻数据,所以先通过start_urls获取半年每个月的url,可以观察到url规则。比如后面两天的网址,很容易看到规则。

  我们可以通过拼接字符串来抓取每天的网址

  * 每天:

  * 每个月:

  代码最后一句是scrapy.Request(url_month, callback=self.parse_month)写的

  * url_month: 解析拼接后接下来要爬取的每一天的网址

  * callback=self.parse_month:这句话的意思是对于每一天的url,会调用一个自定义的parse_month来解析每一天的网页内容

  class QQNewsSpider(Spider):

name = 'qqnews'

start_urls=[#'http://www.chinanews.com/society.shtml',

#'http://www.chinanews.com/mil/news.shtml',

'http://finance.chinanews.com/it/gd.shtml',

]

def parse(self,response):

#找到所有连接的入口,一条一条的新闻做解析 //*[@id="news"] //*[@id="news"]/div[2]/div[1]/div[1]/em/a

for month in range(1,8):

for day in range(1,31):

if month is 2 and day>28 :

continue

elif month is 7 and day>6:

continue

else:

if day in range(1,10):

url_month='http://www.chinanews.com/scroll-news/it/2017/0'+str(month)+'0'+str(day)+'/news.shtml'

else:

url_month='http://www.chinanews.com/scroll-news/it/2017/0'+str(month)+str(day)+'/news.shtml'

yield scrapy.Request(url_month,callback=self.parse_month)

  我们已经从前面的代码中得到了每天的新闻对应的链接地址,接下来我们要抓取对应页面的新闻标题和新闻内容。

  是自定义def parse_month(self, response)处理的内容。

  配合chrome浏览器右键“勾选”,找到每天对应的新闻标题

  Scrapy 提供了一种方便的方式来解析网页数据,在文章中使用Xpath进行分析。

  提示:

  * //ul/li 表示选择ul标签下的所有li标签

  * a/@href 表示选择一个标签的所有href属性

  * a/text() 表示选择标签文本

  * div[@id="content_right"] 表示选择所有id属性为content_right的div标签

   def parse_month(self,response):

#print(response.body)

#到了没一个月的页面下,提取每一天的url

urls=response.xpath('//div[@id="content_right"]/div[@class="content_list"]/ul/li/div[@class="dd_bt"]/a/@href').extract()

for url in urls:

yield scrapy.Request(url,callback=self.parse_news)

  找到新闻标题对应的新闻内容网址后,我们就可以抓取每日新闻标题和对应的新闻内容了。

  然后通过self.parse_news,

  在其中存储标题和内容。这是我们先导入的item=QqnewsItem()

   def parse_news(self,response):

item=QqnewsItem()

item['title']=response.xpath('//div[@class="con_left"]/div[@id="cont_1_1_2"]/h1/text()').extract()

item['text']='\n'.join(response.xpath('//div[@class="left_zw"]/p/text()').extract())

yield item

  在 items.py 中添加一些类

  class QqnewsItem(scrapy.Item):

# define the fields for your item here like:

text=scrapy.Field()#新闻的内容

title=scrapy.Field()#新闻的标题

  最后,如果要将抓取到的内容保存到文件中,可以新建一个begin.py,直接执行下面这句话。

  在 begin.py

  from scrapy import cmdline

cmdline.execute("scrapy crawl qqnews -o IT.csv".split())

  然后我们就可以根据fastText将抓取到的数据处理成fastText格式,然后直接训练。

  参考文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线