Scrapy和Django实现蚌埠医学院手机新闻网站制作

news/2024/5/20 23:54:10/文章来源:https://blog.csdn.net/weixin_34253126/article/details/89587187

最终效果(不看效果就讲过程都是耍流氓):
列表页、详情页展示

实现过程如下:

框架:

  • Scrapy:数据采集
  • Django:数据呈现

目标网站:
蚌埠医学院 学院新闻列表:http://www.bbmc.edu.cn/index.php/view/viewcate/0/

蚌埠医学院学院 新闻列表 截图

第一步:数据抓取

新建爬虫项目

在终端中执行命令

srapy startproject bynews

执行完毕,自动新建好项目文件
爬虫项目目录

编写爬虫代码

在爬虫目录spider中,新建具体爬虫的by_spider.py文件:

by_spider文件

爬虫代码功能说明:

  • 新闻列表自动翻下一页,直到结束,每个新闻列表页提取进如新闻详情页的url
  • 逐个新闻详情页面进入,提取新闻名称,发文机构,发文时间,新闻内容

爬虫源代码内容:

import scrapy
from bynews.items import BynewsItem
import re
class BynewsSpider(scrapy.Spider):name = 'news'start_urls = ['http://www.bbmc.edu.cn/index.php/view/viewcate/0/']allowed_domains = ['bbmc.edu.cn']def parse(self, response):news = response.xpath("//div[@class='cate_body']//ul/li")next_page = response.xpath("//div[@class='pagination']/a[contains(text(),'>')]/@href").extract_first()href_urls = response.xpath("//div[@class='cate_body']/ul/li/a/@href").extract()for href in href_urls:yield scrapy.Request(href,callback=self.parse_item)if next_page is not None:yield scrapy.Request(next_page)def parse_item(self, response):item = BynewsItem() item['title'] = response.xpath("//div[@id='news_main']/div/h1/text()").extract_first()# 获取 作者和发文日期string = response.xpath("//div[@class='title_head']/span/text()").extract_first()# 通过分割获取文章发布日期full_date = string.split('/')year = full_date[0][-4:]month = full_date[1]day = full_date[2]item['post_date'] = year + month +day# 通过正则表达式获取作者matchObj = re.search(r'\[.*\]',string)# 去除两边的中括号string = matchObj.group()string = string[1:]string = string[:-1]item['author'] = stringcontents = response.xpath("//div[@id='news_main']/div/div/span/text()").extract_first()text = ''for content in contents :text = text + contentitem['content'] = textyield item

提取的数据结构items.py文件:

import scrapy
class BynewsItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()author = scrapy.Field()post_date = scrapy.Field()content = scrapy.Field()

爬虫项目的settings.py文件,增加请求头,关闭爬虫协议,仅放修改的部分,其他的默认即可:

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
ROBOTSTXT_OBEY = False
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}

保存爬取数据

准备工作就绪后,执行scrapy crawl news -o news.csv命令开始抓取数据,并且报存到文件news.csv中,方便后续建站导入数据:
爬虫抓取数据过程图

采集好的数据:
csv文件图

爬虫过程结束,准备建站啦~

第二步:数据呈现

新建项目

在终端中执行命令:django-admin startproject 项目名

新建应用

执行命令:python manage.py startapp bynews新建应用
Django目录截图

Django采用MVC架构,需要写的内容比较多,就不一一放图了,直接甩上代码:

项目目录下

urls.py文件:

from django.contrib import admin
from django.urls import include,path
urlpatterns = [path('admin/', admin.site.urls),path('blog/', include('blog.urls')),# 蚌医新闻path('bynews/',include('bynews.urls')),
]

settings.py文件(仅放修改部分):

INSTALLED_APPS = ['blog.apps.BlogConfig','bynews.apps.BynewsConfig','django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
]

bynews应用目录下:

模型models.py文件(模型文件弄好后,需要执行数据迁移什么的命令,Django保证了所有操作都是基于面向对象,十分强大):

from django.db import models
class Bynews(models.Model):title = models.CharField(max_length=30, default='Title')author = models.CharField(null = True,max_length=30)content= models.TextField(null = True)def __str__(self):return self.title

视图views.py文件:

from django.shortcuts import render,get_object_or_404
from .models import Bynewsdef index(request):news = Bynews.objects.order_by('id')[:30]return render(request, 'bynews/newslist.html',{'news_list':news})def detail(request,news_id):news = get_object_or_404(Bynews,pk=news_id)return render(request, 'bynews/detail.html', {'news':news})

urls.py文件:

from django.urls import path 
from . import viewsapp_name = 'bynews'urlpatterns = [# ex:/bynews/path('', views.index, name='index'),# ex:/bynews/4/path('<int:news_id>/', views.detail, name = 'detail'),#path('<int:news_id>/vote/', views.form ,name='form'),
]

在应用目录下新建template文件夹用来存放模板文件:
模板文件

放上一个新闻列表页的模板newslist文件,需要注意其中的url生成方式,static的生成方式:

{% load static %}
<!DOCTYPE html>
<html lang="en" class="app">
<head><meta charset="utf-8" /><meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta name="description" content="" /><meta name="keywords" content="" /><link rel="stylesheet" type="text/css" href="{% static 'bynews/css/style.css' %}"><title>蚌埠医学院 - 新闻列表</title>
</head>
<body><header class="header"><h1>蚌埠医学院</h1><h2>新闻列表</h2></header><ul class="list">{% for news in news_list %}<li><a href="default.htm"><i class="fl"></i><span class="fl"><a href="{% url 'bynews:detail' news.id %}" >{{news.title}}</a></span><em class="fl"> </em></a></li>{% endfor %}</ul><script src="{% static 'bynews/js/vue.js' %}" type="text/javascript"></script><script></script>
</body>
</html>

最终效果(请忽视正文内容不全问题,这是采集没弄好,懒得弄了,基本想法实现了就行):

列表页、详情页展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_786741.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

收集喜欢的网站元素

1、https://letters-inc.jp/2、https://clarity.io/。。。

高性能网站建设进阶指南:Web开发者性能优化最佳实践

高性能网站建设进阶指南&#xff1a;Web开发者性能优化最佳实践 基本信息 作者&#xff1a; 口碑网前端团队 出版社&#xff1a;电子工业出版社 ISBN&#xff1a;9787121105449 上架时间&#xff1a;2010-4-9 出版日期&#xff1a;2010 年4月 开本&#xff1a;16开 其他详细…

WordPress 捐赠插件漏洞,导致网站遭受零日攻击

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 使用“Total Donations”插件的 WordPress 网站&#xff0c;Defiant 建议网站管理员从他们的服务器中删除该插件&#xff0c;防止黑客利用其代码漏洞攻击网站。过去一周&#xff0c;来自 Defian…

分享一些好用的网站

前言 这两年收藏了不少网站&#xff0c;特地整理一下&#xff0c;把一些大家都可能用得上的分享出来&#xff0c;希望能对你有用。 考虑到有一些网站大多数人都知道&#xff0c;所以我就不列出来了。 我把这些网站分为了几大类&#xff1a; 工具类素材类社区类工具类 1、start.…

阿里云 - 免费 CA 证书申请 + Nginx 实现网站https部署 + http强制跳转https

1&#xff0c;进入阿里云&#xff0c;找到导航栏下安全下有个CA证书服务&#xff1b; 2&#xff0c;点进去之后点击立即购买&#xff1b; 3&#xff0c;点进来默认是看不到免费的&#xff0c;点击Symantec&#xff1b; 4&#xff0c;然后点击增强型&#xff1b; 5&#xff…

程序员网站推荐

希望你能遇到更好的网站。 1.git学习 猴子都能懂的GIT入门 https://backlog.com/git-tutorial/cn/stepup/stepup1_1.html 2.问答平台 stackoverflow https://stackoverflow.com/ n.遇到了再添加 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可…

6个超给力网站资源共享 一分钟吊起你的兴趣

超给力的网站资源分享给你们&#xff0c;娱乐、生活、学习应有尽有&#xff0c;赶紧来看看吧&#xff01; 千千音乐&#xff1a;http://music.taihe.com/songlist千千音乐是中国音乐门户之一,为你提供海量正版高品质音乐,权威的音乐榜单,快速的新歌速递,契合你的主题电台,人性化…

51CTO网站博客更新声明

51CTO博客自成立以来&#xff0c;受到网友广泛关注&#xff0c;为了能够提供更好的服务&#xff0c;51CTO网站决定对博客栏目进行大幅度改版。 截止到6月25日&#xff0c;网站后台管理界面风格已经调整完成&#xff0c;此目的是为了能让广大使用者更方便地使用我们的博客产品。…

学习前端的好处,网站文章复制不了?别扯.

很多时候我们在网上浏览文章或查看资料的时候&#xff0c;看到写的非常好的句子想要复制粘贴保存一下&#xff0c;这是拖动鼠标&#xff0c;发现“选不中&#xff0c;复制不了”&#xff0c;哎&#xff0c;这时候咱们前端高能出手&#xff0c;这都不是事儿&#xff01;很简单&a…

python爬取证券之星网站

周末无聊&#xff0c;找点乐子。。。#coding:utf-8 import requests from bs4 import BeautifulSoup import random import time#抓取所需内容 user_agent ["Mozilla/5.0 (Windows NT 10.0; WOW64)", Mozilla/5.0 (Windows NT 6.3; WOW64),Mozilla/5.0 (Windows NT …

seo我告诉你

seo我告诉你&#xff0c;这回seo真的告诉你百度云链接 链接&#xff1a;http://pan.baidu.com/s/1qYpM9y8 密码&#xff1a;mad6 seo优化教程&#xff1a;

介绍MyBatis代码生成网站(六) --- SQL方法的选择

为什么80%的码农都做不了架构师&#xff1f;>>> 一.简介 网址: http://www.fwjava.com 操作流程: 详见“ 介绍MyBatis代码生成网站(一) --- 基本操作 ” 需求描述: 在实际的应用开发中 , 我们希望在14个大类26个SQL方法中 , 选择生成自己想要的几个特定方法. 那么&…

python多页网站目录_Python爬取网址中多个页面的信息

通过上一篇博客了解到爬取数据的操作&#xff0c;但对于存在多个页面的网址来说&#xff0c;使用上一篇博客中的代码爬取下来的资料并不完整。接下来就是讲解该如何爬取之后的页面信息。 一、审查元素 鼠标移至页码处右键&#xff0c;选择检查元素接着屏幕下方就会出现对应的ht…

给自己的网站加入智能聊天功能

引言 现在突然发现有很多 QQ 群都开启了群机器人的功能&#xff0c;其中有两个角色&#xff0c;他们分别是&#xff1a;Baby Q 和 QQ 小冰。在 Q 群中&#xff0c;你可以对他们进行任意程度的调戏&#xff0c;不过&#xff0c;遗憾的是鱼和熊掌不可得兼&#xff0c;一个群只能进…

用PHP做采集功能网站的思路

2019独角兽企业重金招聘Python工程师标准>>> 1、指定一个列表页&#xff0c;用curl或file_get_contents将页面读取进来&#xff1b; 2、用正则或者XML分析DOM&#xff0c;获取到列表中文章的超链接&#xff0c;将其保存为一个任务数组&#xff1b; 3、遍历数组&…

刷网站关键字_「李知恩死亡」刷爆韩网吓坏IU粉丝!Luna被指蹭热度,妹妹大爆料...

一夜之间「李知恩」、「李知恩死亡」关键字刷爆韩国各大网站&#xff0c;让诸多IU粉丝心碎&#xff0c;众人仔细查证之后才发现是个大乌龙&#xff0c;这才松了一口气。事情的起因是3月3日晚播出的纪录片《人真好》&#xff0c;作为纪录片主人公的Luna提到了「李知恩이지은」去…

phpexcel如何预览数据_收藏 | 大数据学习网站

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;今日课程菜单Java全栈开发 | Web前端H5大数据开发 | 数据分析人工智能Python | 人工智能物联网来源&#xff1a;小职(z_zhizuobiao)找我&#xff1a;✅ 解锁高薪工作 ✅ 免费获取干货教程未完待续如今&#xff0c;得大数…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

网摘是否影响网络推广和SEO

在网络推广中&#xff0c;网摘推广一直是作为必备的推广方式之一&#xff0c;任何XX推广大全必有网摘推广这一项&#xff0c;网摘和网络收藏夹&#xff0c;我姑且把它们归为一类吧。这种推广方式持续好几年了&#xff0c;那么现在&#xff0c;网摘是否还能影响网站推广和SEO呢&…

flash快速入门_快速跟踪您的Flash网站

flash快速入门Many Websites that use Flash could be optimized to load much more quickly than they currently do. By breaking up one large .swf into multiple smaller .swf files, you can decrease the time it takes your site to load, while at the same time maki…