浏览器抓取网页(Python中urllib库Python2系列使用的步骤和访问步骤 )
优采云 发布时间: 2021-11-19 15:18浏览器抓取网页(Python中urllib库Python2系列使用的步骤和访问步骤
)
一:获取一个简单的页面:
用Python做爬虫爬取网站 这个功能很强大。今天尝试爬取百度主页。它成功了。让我们来看看步骤。
首先,你需要准备工具:
1.python:比较喜欢用新东西,所以用Python3.6,python下载地址:
2.开发工具:可以使用Python编译器(小),但是因为我是前端,之前用过webstrom,所以选择了JetBrains的PyCharm。下载地址:%E4%B8%8B%E8 %BD%BD
3.Fiddler - 网页请求监控工具,我们可以通过它来了解用户触发网页请求后发生的详细步骤;(从百度下载)
理解Python中的urllib库
Python2系列使用的是urllib2,Python3之后都会集成到urllib中。
在 2:
urllib2.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
urllib2.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
3 是
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
#这个函数看起来接受很多的参数啊,不过很多我们平时不会用到,用到的url居多。
显然,我使用后者
简单的爬虫代码
#encoding:UTF-8
import urllib.request
url = "https://www.douban.com/ "
data = urllib.request.urlopen(url).read()
data = data.decode('UTF-8')
print(data)
效果如下:
二:捕获需要伪装浏览器的网站
但是一个小小的百度主页怎么能满足我,于是想到了一些网站,需要伪装浏览器才能爬取,比如豆瓣,
1.伪装浏览器:
对于一些需要登录的网站,如果请求不是从浏览器发出的,将得不到响应。因此,我们需要将爬虫程序发送的请求伪装成普通浏览器。
具体实现:自定义网页请求头。
2.,使用Fiddler查看请求和响应头
打开工具 Fiddler,然后在浏览器中访问“”。在Fiddler左侧的访问记录中,找到条目“200 HTTPS”,点击查看对应请求和响应头的具体内容:
3. 访问:
import urllib.request
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
# 定义保存函数
def saveFile(data):
path = "F:\\pachong\\02_douban.out"
f = open(path, 'wb')
f.write(data)
f.close()
# 网址
url = "https://www.douban.com/"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/51.0.2704.63 Safari/537.36'}
req = urllib.request.Request(url=url, headers=headers)
res = urllib.request.urlopen(req)
data = res.read()
# 也可以把爬取的内容保存到文件中
saveFile(data)
data = data.decode('utf-8')
# 打印抓取的内容
print(data)
# 打印爬取网页的各类信息
print(type(res))
print(res.geturl())
print(res.info())
print(res.getcode())
让我们看看这段代码:
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context