~ 项目于补充

[TOC]

---

昨日回顾:

增量式: 监测一个网站, 只要网站有更新的数据, 爬取更新的数据
去重:
基于url
基于数据指
redis数据库: sadd 集合名 值
judge = sadd 集合名 值: 1).如果该值在集合中已经存在, judge为0, 代表该数据已经爬取过了
2).如果该值不在集合中, judge为1, 代表数据没有被爬过

scrapy框架的响应数据: 获取其二进制流 ---> response.body
requests模块的响应数据: 获取其二进制流 --> response.content

#### 1.Scrapy & Django项目

```Python
# 需求: 编写爬虫项目与Django项目详解和, 将爬取到的数据展示到前端页面上
```

```Python
# 爬虫的编写:
```

```Python
# spider编写:
import scrapy
from dl.items import DlItem
class PSpider(scrapy.Spider):
name = ‘p‘
# allowed_domains = [‘www.baidu.com‘]
start_urls = [‘https://www.kuaidaili.com/free/‘]

def parse(self, response):
# print(response)
tr_list = response.xpath(‘//*[@id="list"]/table/tbody/tr‘)
# print(tr_list)
for tr in tr_list:
ip = tr.xpath(‘./td[1]/text()‘).extract_first()
port = tr.xpath(‘./td[2]/text()‘).extract_first()
typ = tr.xpath(‘./td[3]/text()‘).extract_first()
protocal = tr.xpath(‘./td[4]/text()‘).extract_first()
position = tr.xpath(‘./td[5]/text()‘).extract_first()
# print(ip, port, protocal, position)
item = DlItem()
item[‘ip‘] = ip
item[‘port‘] = port
item[‘typ‘] = typ
item[‘protocal‘] = protocal
item[‘position‘] = position
print(item)
yield item
```

```Python
# items编码
import scrapy
class DlItem(scrapy.Item):
ip = scrapy.Field()
port = scrapy.Field()
typ = scrapy.Field()
protocal = scrapy.Field()
position = scrapy.Field()
```

```Python
# Django项目创建与所有配置:
1.models创建:
from django.db import models

# Create your models here.

class Proxy(models.Model):
ip = models.CharField(max_length=50)
port = models.CharField(max_length=50)
typ = models.CharField(max_length=50)
protocal = models.CharField(max_length=50)
position = models.CharField(max_length=50)

2.在scrapy框架项目中嵌入django
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(‘.‘)))
os.environ[‘DJANGO_SETTINGS_MODULE‘] = ‘proxyscan.settings‘
# 手动初始化Django:
import django
django.setup()

3.修改爬虫item:
import scrapy
from scrapy_djangoitem import DjangoItem
from proxy import models
class DlItem(DjangoItem):
django_model = models.Proxy

4.pipeline编码:
class DlPipeline(object):
def process_item(self, item, spider):
print(‘开启数据库, 进行数据存储‘)
item.save()
print(‘关闭数据库‘)
return item

5.Django项目迁移数据库与admin后台配置
Python manage.py makemigrations
python manage.py migrate

from proxy.models import Proxy
admin.site.register(Proxy)

# 创建超级用户:
Python manage.py createsuperuser

```

```Python
# 路由:
from django.conf.urls import url
from django.contrib import admin
from proxy.views import index

urlpatterns = [
url(r‘^admin/‘, admin.site.urls),
url(r‘^index/‘, index),
]

# 视图函数:
from django.shortcuts import render
from proxy.models import Proxy
def index(requests):
p = Proxy.objects.all()
return render(requests, ‘index.html‘, {"p":p})

```

```Python
# 前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row" >
<div class="col-md-10 col-md-offset-2" style="margin:0 auto">
<div class="panel panel-primary">
<div class="panel-heading" style="margin-top:50px">
<h3 class="panel-title">代理IP一览表</h3>
</div>
<div class="panel-body">
<table class="table table-striped">
<thead>
<tr>
<th>IP</th>
<th>Port</th>
<th>Type</th>
<th>Protocal</th>
<th>Positon</th>
</tr>
</thead>
<tbody>
{% for i in p %}
<tr>
<th>{{ i.ip }}</th>
<td>{{ i.port }}</td>
<td>{{ i.typ }}</td>
<td>{{ i.protocal }}</td>
<td>{{ i.position }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>

</body>
</html>
```

原文地址:https://www.cnblogs.com/hanghaiwang/p/11531417.html

时间: 2024-10-09 20:01:03

~ 项目于补充的相关文章

补充 作业八:团队项目——Alpha阶段项目总结 补充

游戏界面: 单一.无背景图片 加入了背景 游戏结束: 无变化 无变化 游戏记录 无 加入数据库:有数据记录! 游戏初始化: 无 加入多种模式 此次任务后的总结: 经过上一次的答辩,以及认真观看了其他组的同学的完成的情况,我作为组长,深深的认识到了自己和优秀组的同学还有一定的差距,原因有两个:第一:我们的程序过于简单,没有达到此次软件工程课的目的:第二:游戏界面的美化不够,显得格外单调.以上这两个原因促使我们组在原有的基础上对我们的程序进行加工和完善!于是,我们小组对我们的项目进行了改进,主要是针

vue项目和django项目交互补充,drf介绍,restful规范

目录 一.vue项目与django项目的交互 二.drf(Django-restframework) 1. drf主要知识点 2. drf框架安装 3. 接口 4. restful接口规范 三.django的CBV模型生命周期 一.vue项目与django项目的交互 vue中的发送ajax请求,其中的参数有: created() { this.$axios({ url: 'http://127.0.0.1:8000/test/', // 请求地址 method: 'post', // 请求方式

团队项目

任务: 1.每个团队从Github上fork这个项目的源代码 https://github.com/RABITBABY/We-have-bing 2.了解.部署.运行这个项目,理解其功能及实现: 3.进行必要的测试,发现软件的bug并记录,并进行bug的排除: 发布博客内容: 简要说明如何下载部署运行这个项目: 补充这个软件的单元测试并提交到Github上: 解释说明找出的bug及修复情况: 列出每个团队成员的个人贡献分. ------------------------------------

[团队项目]----Math Calculator

团队项目 ----Math Calculator 任务: 1.每个团队从Github上fork这个项目的源代码 https://github.com/RABITBABY/We-have-bing 2.了解.部署.运行这个项目,理解其功能及实现: 3.进行必要的测试,发现软件的bug并记录,并进行bug的排除: 发布博客内容: 简要说明如何下载部署运行这个项目: 补充这个软件的单元测试并提交到Github上: 解释说明找出的bug及修复情况: 列出每个团队成员的个人贡献分. -----------

0421团队项目 1.0

团队项目 ----Math Calculator 任务: 1.每个团队从Github上fork这个项目的源代码 https://github.com/RABITBABY/We-have-bing 2.了解.部署.运行这个项目,理解其功能及实现: 3.进行必要的测试,发现软件的bug并记录,并进行bug的排除: 发布博客内容: 简要说明如何下载部署运行这个项目: 补充这个软件的单元测试并提交到Github上: 解释说明找出的bug及修复情况: 列出每个团队成员的个人贡献分. -----------

团队项目:二次开发

二.团队项目:二次开发 至此,我们有了初步的与人合作经验,接下来投入到更大的团队中去. 也具备了一定的个人能力,能将自己的代码进行测试.接下来尝试在别人已有的基础上进行开发. 上一界51冯美欣同学的项目:http://www.cnblogs.com/maxx/ 1.每个团队从Github上fork这个项目的源代码: https://github.com/RABITBABY/We-have-bing 2.了解.部署.运行这个项目,理解其功能及实现: 3.进行必要的测试,发现软件的bug并记录,并进

nice-repo 搜集优秀的开源项目

作为一介草根,在 github 上找开源项目是非常耗时的.原因不外乎以下几种: 项目名称个性化严重.(在阅读项目介绍前你不会知道 raveren/kint 是做什么的) 大部分的项目简介都是英文.(英文牛掰的大神可以无视我了.我特别不能理解的一点是很多国人的项目,都是用英文简介然后把中文简介藏到 wiki 里,更有甚者直接就没有中文简介!) 根据 stars 筛选,经常会错过一些很不错的项目. 为了减少这样不必要的时间浪费,nice-repo 诞生了,这是一个成长型的项目,我将陆续搜集优秀的开源

构建javaweb项目

之前一直用eclipse,netbean开发工具集成插件来构建java web项目,那如果不依靠构建工具怎么办呢. 下面是一个批处理文件,把这个bat文件放在你的项目下执行,就可以生成一个target文件,target文件里面就有你想要的东西了 set P_NAME="你的web项目名称" echo 清空编译输出目录中... rd /s/q target mkdir target\%P_NAME% echo copy 项目WEB下的文件... xcopy /e/h web target

3.手动搭建Maven项目

# 0.写在前面 首先回忆一下我们之前都做了什么:     1.成功在本机安装Maven软件,并配置了环境变量     2.成功配置了Maven的配置文件(conf/settings.xml文件),保证Maven能够通过我们指定的国内镜像下载jar文件,并将jar文件都保存在我们指定的文件夹当中        并且在创建Maven项目的时候默认使用JDK 1.8版本进行创建     3.成功配置了Eclispe下的Maven开发环境,并且保证能够快速创建一个基于Eclispe的Maven项目