Python Django 爬取网页并解析网页源码
一、原理
使用python爬取网页源码,有很多库文件可以调用,但是这里我们使用BeautifulSoup模块,整个爬取过程很简单,首先是请求到网页源码,然后是处理成html格式,再使用筛选条件选出我们想要的标签内容,最后是替换掉多余和不想要的的内容,最后在呈现到网页中。
二、编译器
Pycharm (在新建项目中选择Django,因为我们使用的是Django框架)
三、实验流程
1、新建项目
进入pycharm,选择新建项目,如上图所示,选择Django,进行相应的配置,然后选择创建,在创建后初始文件如下所示:
2、建立应用
在完成创建新项目后,点击下方的终端(Terminal)在终端中输入命令:python manage.py startapp demo
输入完后回车,左侧项目栏便创建了新的应用,完整项目如下所示:
注意:其中demo文件夹中的spider.py 、urls.py以及templates文件夹中的post.html都是自己创建的,初始并没有。
3、修改Settings.py文件
在创建完应用后,首先就要到settings.py文件中注册应用,如下图所示:
如上图所示,在这一块代码的最后一行输入我们的应用名,即可完成注册,后面不要忘记逗号!
接下就是继续在这个文件中进行修改,修改模板路径,修改结果如下图所示:
在修改模板路径之前,我们需要导入一个模块:import os
到这里Settings.py文件的修改就结束了
4、数据库迁移
在配置完成Settings以后,再次打开终端命令行,在其中输入python manage.py makemigrations demo
这条命令中的demo就是应用名,自己定义了什么应用名就写什么,在执行完这一条命令以后会创建一个新的文件,如下图所示:
如果报错,直接网络上搜索命令,强制创建文件,在完成上一步后,再在终端中输入python manage.py migrate demo
,回车以后,就会提示一连串的OK,到这里这一步就算是完成了
5、创建爬虫文件
到了这一步,就是开始编写爬虫的文件,这里我们在demo这个文件夹下创建一个python文件,随意命名,创建完成后进入文件,进行代码的编写:
from bs4 import BeautifulSoup
import requests
from os import replace
def Spider(Url):
Res1 = requests.get(url=Url).text
Res = BeautifulSoup(Res1).find_all('div',class_='showtxt')
Res_Text = Res[0].text.replace(' ','')
print(Res_Text)
return Res_Text
上述代码,只是对特定网站来编写的,用来获取小说内容,其中的find_all()函数中的筛选条件需要根据网页源码中的标签内容进行更改,接下来的replace()函数,也是根据获取内容来进行更改,这个函数是用来替换掉多余和没用的内容。
这里变量的命名比较随意,如果你觉得自己写的更加简洁方便,可以直接替换,只需要注意后续的调用就可以了
6、创建Html文件
html文件主要是对内容进行渲染,以特定的呈现方式进行呈现,代码如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<form action="/search-post/" method="post">
{% csrf_token %}
<input type="text" name="q">
<input type="submit" value="搜索">
</form>
<div>
<div><label>网页源码:</label></div>
<textarea rows="20" cols="150">{{ pro_data }}</textarea>
<div><label>文本数据:</label></div>
<textarea rows="20" cols="150">{{ spiders }}</textarea>
</div>
</body>
</html>
这里的html文件中涉及到了表单和模板,就不进行解释了,不懂得直接用就可以,懂得自然就懂!
7、修改Views.py文件
在这里对数据的请求进行处理,代码如下所示:
from django.shortcuts import render
from .spider import Spider,Spider1
from django.views.decorators import csrf
def search_post(request):
ctx ={}
pro_data = {}
data = {}
if request.POST:
ctx['rlt'] = request.POST['q']
pro_data['pro_data'] = Spider1(ctx['rlt'])
data['data'] = Spider(ctx['rlt'])
return render(request, "post.html", context={
'pro_data':pro_data['pro_data'],
'spiders':data['data']
})
这里我们导入了spider.py文件,用来调用spider函数,从而获取网页源码和解析,这里对ctx的赋值,就是从网页输入框中获取的内容,也就是网址。
8、配置urls.py
在初始文件中,应用文件夹中并没有urls.py文件,所以在demo文件夹中创建urls.py文件,但是在配置这个文件之前,需要在另一个urls.py中先编写以下内容:
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('demo.urls'))
完成以上内容后,再回到我们自己创建的urls.py中编写新的内容,代码如下所示:
from django.urls import path
from . import views
urlpatterns = [
path('search-post/', views.search_post,name='A'),
]
这里的search-post,可以自己更改
9、访问网页
完成以上所有内容后,再次打开终端,输入以下命令:python manage.py runserver 127.0.0.1:8080
回车以后,如果是下图所示,就表明运行成功:
此时打开浏览器,输入http://127.0.0.1:8080/search-post/(这里search-post就是urls.py中的search-post,那个文件中你写的是什么,这里就写什么),结果如下图所示:
这里是解析后的图片,正确的操作方式为,在输入框中输入网址,点击搜索,然后在下方的显示框中,就会显示网页的源码和解析后的文本内容。
这里解析的网页网址为:笔趣阁