如何用python创建一个下载网站-用Python写一个简单的网页下载

作为一个Python+爬虫的小白,今天要搞点爬虫的活儿,以前没做过,从零开始。 win10的系统,python我的电脑上以前不记得什么时候安装过,安装的是3.6的版本,能用。代码工具,先使用VS code。 先做个简单的爬取网页的demo。 Python3 提供了 urllib 这个标准库,无需安装,即可引用使用:

from urllib import request

复制代码

然后,我们就可以使用urllib发送GET请求了。代码如下:

from urllib import request

req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')

req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')

html_news = request.urlopen(req_news).read()

print('------------')

print(html_news.decode('gbk'))

复制代码

User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。 这里在请求头中添加这个是为了模拟浏览器正常请求,很多服务器都会做检测,发现不是正常浏览器的请求会直接拒绝(很多网站不一定有这种检测,但这是最基本的防爬虫策略),当然真实的浏览器发送的请求头里面不仅仅只有一个 UA。浏览器上截图。

906163f0af1c4c6492d48bdcef3525ff.jpg

注意:request.urlopen(req_news).read()里读出来的内容有时候是二进制(bytes)数据,需要进行转换,中文需要用decode转成 GBK 格式,写入时可写入UTF-8格式。

有时候读出来的直接是字符串,可以用encoding转成utf-8

为什么是GBK格式呢?为什么不是UTF-8或或者别的格式呢

我们F12查看一下网页代码,在html/head/meta标签先有charset属性,标识了网页的编码。我们可以把它取出来作为转码依据。

注意:默认格式的编码是gbk,如果取出来的charset为空,设为gbk格式

41a66149af61475b90c6b4bfc6ba68bf.jpg 完善代码如下:

from urllib import request

req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')

req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')

html_news = request.urlopen(req_news).read()

if len(char_set) == 0:

char_set = ['gbk']

html_news = html_news.decode(char_set[0])

print('------------')

print(html_news)

复制代码

然后,将读出来的页面信息写到一个文件里。python读写文件需要先引入os。

import os

复制代码

base_dir = os.getcwd()

#获取当前文件夹的绝对路径

file_name = os.path.join(base_dir, 'data', 'news.html')

#打开fie_name路径下的news.html文件,采用写入模式

#若文件不存在,创建,若存在,清空并写入

my_open = open(file_name, 'w', encoding="utf-8")

#在文件中写入内容

my_open.write(html_news.decode('gbk'))

my_open.close()

复制代码

完整的读写代码如下:

from urllib import request

# from lxml import etree

# import re

import os

req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')

req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')

html_news = request.urlopen(req_news).read().decode('gbk')

print('------------')

print(html_news)

base_dir = os.getcwd()

#获取当前文件夹的绝对路径

file_name = os.path.join(base_dir, 'data', 'news.html')

# print(file_name)

#打开fie_name路径下的news.html文件,采用写入模式

#若文件不存在,创建,若存在,清空并写入

my_open = open(file_name, 'w', encoding="utf-8")

#在文件中写入内容

my_open.write(html_news)

my_open.close()

复制代码

这只是爬虫的第一步,接下来还需要分析网页数据,提取自己想要的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值