python抓取网页内容401应该用哪个库_python3使用requests模块爬取页面内容入门

python的爬虫相关模块有很多,除了requests模块,再如urllib和pycurl以及tornado等。相比而言,requests模块是相对简单易上手的。通过文本,大家可以迅速学会使用python的requests模块爬取页码内容。

1.Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

官网:http://cn.python-requests.org/zh_CN/latest/

1.安装requests模块

这里我是通过pip方式进行安装:

> pip install requests

安装requests

运行import requests,如果没提示错误,那说明已经安装成功了!

2.安装beautifulsoup4

pip install beautifulsoup4

3.requests模块浅析

1)发送请求

首先当然是要导入 Requests 模块:

import requests

然后,获取目标抓取网页。这里我以简书为例:

response = requests.get('https://www.jianshu.com/u/5328be71bdc1')

这里返回一个名为 response 的响应对象。从这个对象中获取所有我们想要的信息。这里的get是http的响应方法,所以举一反三,也可以将其替换为put、delete、post、head等方法。

2)传递URL参数

有时我们想为 URL 的查询字符串传递某种数据。如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, jianshu.com/get?key=val。 Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。

举例来说,当我们google搜索“python爬虫”关键词时,newwindow(新窗口打开)、q及oq(搜索关键词)等参数可以手工组成URL ,那么你可以使用如下代码:

payload = {'newwindow': '1', 'q': 'python爬虫', 'oq': 'python爬虫'}

r = requests.get("https://www.baidu.com/search", params=payload)

3)响应内容

通过r.text或r.content来获取页面响应内容。

import requests

r = requests.get('https://github.com/timeline.json')

r.text

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。这里补充一点r.text和r.content二者的区别,简单说:

resp.text返回的是Unicode型的数据;

resp.content返回的是bytes型也就是二进制的数据;

所以如果你想取文本,可以通过r.text,如果想取图片,文件,则可以通过r.content。

4)获取网页编码

r = requests.get('http://www.jianshu.com/')

r.encoding

> 'utf-8'

5)获取响应状态码

我们可以检测响应状态码:

r = requests.get('http://www.jianshu.com/')

r.status_code

200

4.案例演示1

# -*- coding: utf-8 -*-

import requests

import bs4

#要抓取的目标页码地址

url = 'https://tower.im/roadmap'

#抓取页码内容,返回响应对象

response = requests.get(url)

#查看响应状态码

status_code = response.status_code

#使用BeautifulSoup解析代码,并锁定页码指定标签内容

content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")

element = content.find_all('tr')

print(status_code)

print(element)

爬取结果截图

爬取结果

5.案例演示2

调用GitHub的公共API

import requests

url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'

r = requests.get(url)

print("Status code:",r.status_code)

response_dict = r.json()

print(response_dict.keys())

print("Total repositories:",response_dict['total_count'])

#探索有关GitHub仓库的信息

repo_dicts = response_dict['items']

print("Repositories returned:",len(repo_dicts))

#研究第一个GitHub仓库

repo_dict = repo_dicts[0]

print("\nkeys:",len(repo_dict))

for key in sorted(repo_dict.keys()):

print(key)

print("\nSelected information about first repository:")

print('Name:',repo_dict['name'])

print('Owner:',repo_dict['owner']['login'])

运行结果如下:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32

Type "copyright", "credits" or "license()" for more information.

>>> ================================ RESTART ================================

>>>

Status code: 200

dict_keys(['items', 'total_count', 'incomplete_results'])

Total repositories: 2904641

Repositories returned: 30

keys: 73

archive_url

archived

assignees_url

blobs_url

branches_url

clone_url

collaborators_url

comments_url

commits_url

compare_url

contents_url

contributors_url

created_at

default_branch

deployments_url

description

downloads_url

events_url

fork

forks

forks_count

forks_url

full_name

git_commits_url

git_refs_url

git_tags_url

git_url

has_downloads

has_issues

has_pages

has_projects

has_wiki

homepage

hooks_url

html_url

id

issue_comment_url

issue_events_url

issues_url

keys_url

labels_url

language

languages_url

license

merges_url

milestones_url

mirror_url

name

node_id

notifications_url

open_issues

open_issues_count

owner

private

pulls_url

pushed_at

releases_url

score

size

ssh_url

stargazers_count

stargazers_url

statuses_url

subscribers_url

subscription_url

svn_url

tags_url

teams_url

trees_url

updated_at

url

watchers

watchers_count

Selected information about first repository:

Name: awesome-python

Owner: vinta

你可能感兴趣的:(python抓取网页内容401应该用哪个库_python3使用requests模块爬取页面内容入门)