Python信息系统(Scrapy分布式+Django前后端)-3.Scrapy抓取篇

原创不易,转载请标明出处,谢谢。

该项目全部内容Link
Python信息系统(Scrapy分布式+Django前后端)-1.项目介绍篇
Python信息系统(Scrapy分布式+Django前后端)-2.Scrapy配置篇
Python信息系统(Scrapy分布式+Django前后端)-3.Scrapy抓取篇
Python信息系统(Scrapy分布式+Django前后端)-4.Gerapy爬虫分布式部署
Python信息系统(Scrapy分布式+Django前后端)-5.数据清洗和处理篇
Python信息系统(Scrapy分布式+Django前后端)- 6.Django新闻系统展示篇
Python信息系统(Scrapy分布式+Django前后端)- 7.Django内容后台管理系统配置篇
Python信息系统(Scrapy分布式+Django前后端)- 8.Django内容后台管理系统管理模块篇
Python信息系统(Scrapy分布式+Django前后端)- 9.Django前台Web展示部署
Python信息系统(Scrapy分布式+Django前后端)- 10.Django前台HTML功能
在创建的scrapy项目下的spider文件下有你创建的spider文件进行爬虫代码编写
举例说明比如人民网某页面
对应url网址是:http://ah.people.com.cn/GB/227133/227139/index.html

先来看一下网页吧

Python信息系统(Scrapy分布式+Django前后端)-3.Scrapy抓取篇_第1张图片
Python信息系统(Scrapy分布式+Django前后端)-3.Scrapy抓取篇_第2张图片
Python信息系统(Scrapy分布式+Django前后端)-3.Scrapy抓取篇_第3张图片
还有轮播图等其他结构 请自行解析一下。

编写对应 spider/xxxxx.py文件

# -*- coding: utf-8 -*-
import scrapy
from 你的项目名.items import 项目名下对应的Item
import json
import time

class Ah227133227139Spider(scrapy.Spider):
    name = '你的spider名称' # 默认不用修改
    allowed_domains = [] # 需要修改成空作用域
    start_urls = ['http://ah.people.com.cn/GB/227133/227139/index.html']
    url = "http://ah.people.com.cn/GB/227133/227139/index.html"
    number = 1
	# 抓取新闻标题和url信息
    def parse(self, response):
        html = response.xpath('//div[@class="ej_left "]')
        Item_title = html.xpath('//li/a/text()').extract()
        Item_url = html.xpath('//li/a/@href').extract()
        Item_publishTime = html.xpath('//li/span/text()').extract()
        Item_title = [i for i in Item_title if i != '']
        Item_url = [i for i in Item_url if i != '']

        for each in range(len(Item_title)):
            item = 项目名下对应的Item()
            item['title'] = Item_title[each]  # 新闻标题
            if Item_url[each].startswith("http"):
                item['url'] = Item_url[each]
            else:
                item['url'] = "http://ah.people.com.cn/" + Item_url[each]  # 新闻连接
            item['intro'] = ""  # 新闻摘要
            item['thumbImg'] = ""  # 封面图片
            item['author'] = ""  # 作者
            item['publishTime'] = Item_publishTime[each][1:-1].split(" ")[0]  # 新闻发布时间
            item['cityId'] = cityId
            item['id'] = ""  # 新闻ID
            item['source'] = "人民网-安徽频道-人民电视-新闻资讯"  # 新闻来源
            item['typeId'] = "你选择的类别ID"  # 类别ID
            item['typeName'] = "你选择的类别名称"  # 类别名称
            item["py_name"] = self.name + ".py"  # 脚本名称

            yield scrapy.Request(item['url'], callback=self.parse_detail, meta={
     'item': item})

        if self.number < 1: #如果需要抓多页这里设置
            self.number = self.number + 1
            # 每次处理完一页的数据之后,重新发送下一页页面请求
            # self.number自增1,同时拼接为新的url,并调用回调函数self.parse处理Response
            time.sleep(1)
            yield scrapy.Request(self.url + str(self.number), callback=self.parse)
            
	# 抓取新闻正文
    def parse_detail(self, response):
        item = response.meta['item']
        content_text = response.text
	# 由于版面不同 需要进行判断
        if "fl text_con_lef" in content_text:
            item['content'] = response.xpath('//div[@class="fl text_con_left"]').extract_first()
        elif "pic_content clearfix" in content_text:
            item['content'] = response.xpath('//div[@class="pic_content clearfix"]').extract_first() + response.xpath(
                '//div[@class="content clear clearfix"]').extract_first()
        elif "pclearfix wb-p1 wb-p1-wide" in content_text:
            item['content'] = response.xpath('//div[@class="pclearfix wb-p1 wb-p1-wide"]').extract_first()
        else:
            item['content'] = "信息未抓取或文章格式不正确,或文章存在视频需要解密"
        yield item

执行爬虫文件

在项目目录下打开命令行执行

scrapy crawl 你的spider文件(注意没有.py)

执行结果如下没有报错的情况下会显示抓取的内容刷屏一样的感觉非常爽
然后看一下mongdb数据库吧
Python信息系统(Scrapy分布式+Django前后端)-3.Scrapy抓取篇_第4张图片
只要这里的脚本可以执行,就写下一个吧,有足够的脚本之后就开始下一步分布式部署了。

你可能感兴趣的:(新闻资讯项目,python,mongodb,html)