作为一个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。浏览器上截图。
注意:request.urlopen(req_news).read()里读出来的内容有时候是二进制(bytes)数据,需要进行转换,中文需要用decode转成 GBK 格式,写入时可写入UTF-8格式。
有时候读出来的直接是字符串,可以用encoding转成utf-8
为什么是GBK格式呢?为什么不是UTF-8或或者别的格式呢
我们F12查看一下网页代码,在html/head/meta标签先有charset属性,标识了网页的编码。我们可以把它取出来作为转码依据。
注意:默认格式的编码是gbk,如果取出来的charset为空,设为gbk格式
完善代码如下:
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()
复制代码
这只是爬虫的第一步,接下来还需要分析网页数据,提取自己想要的内容。