Python进阶篇五Python爬虫的抓取网页

Posted deepboat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python进阶篇五Python爬虫的抓取网页相关的知识,希望对你有一定的参考价值。

目录

五、Python爬虫的抓取网页

Python 爬虫应用案例:爬取目标的网页,并将其保存到本地。

对要编写的爬虫程序进行分析,可以简单分为为以下三个部分:

  • 目标 url 地址
  • 发送请求
  • 将响应数据保存至本地

明确逻辑后,我们就可以正式编写爬虫程序了。

5.1 导入所需模块

在这里我们使用标准库 urllib 库来编写爬虫,导入所需模块,代码如下:

from urllib import request
from urllib import parse

5.2 获取目标URL地址

定义 URL 变量,拼接 url 地址,从而获取目标地址。代码如下:

url = 'http://www.baidu.com/s?wd='
# 想要搜索的内容
word = input('请输入搜索内容:')
params = parse.quote(word)
full_url = url.format(params)

5.3 向目标URL发送请求

发送请求主要分为以下三个步骤:

  • 创建请求对象-Request
  • 获取响应对象-urlopen
  • 解析响应内容-read

代码如下:

# 重构请求头
headers = 'User-Agent': 'Mozilla/6.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
# 创建请求对应
req = request.Request(url=full_url, headers=headers)
# 获取响应对象
res = request.urlopen(req)
# 解析响应内容
html = res.read().decode("utf-8")

5.4 保存为本地文件

把爬取的照片保存至本地,此处需要使用 Python 编程的文件 IO 操作,代码如下:

filename = word + '.htm'
with open(filename,'w', encoding='utf-8') as f:
    f.write(html)

完整程序如下所示:

from urllib import request, parse

# 1.拼url地址
url = 'http://www.baidu.com/s?wd='
word = input('请输入搜索内容:')
params = parse.quote(word)
full_url = url.format(params)
# 2.发请求保存到本地
headers = 'User-Agent': 'Mozilla/6.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
req = request.Request(url=full_url, headers=headers)
res = request.urlopen(req)
html = res.read().decode('utf-8')
# 3.保存文件至当前目录
filename = word + '.htm'
with open(filename, 'w', encoding='utf-8') as f:
    f.write(html)

5.5 优化程序

Python 函数式编程可以让程序的思路更加清晰、易懂。接下来,使用函数编程的思想更改上面代码。

定义相应的函数,通过调用函数来执行爬虫程序。修改后的代码如下所示:

from urllib import request
from urllib import parse


# 拼接URL地址
def get_url(word):
    url = 'http://www.baidu.com/s?'
    # 此处使用urlencode()进行编码
    params = parse.urlencode('wd': word)
    url = url.format(params)
    return url


# 发请求,保存本地文件
def request_url(url, filename):
    headers = 'User-Agent': 'Mozilla/6.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
    # 请求对象 + 响应对象 + 提取内容
    req = request.Request(url=url, headers=headers)
    res = request.urlopen(req)
    html = res.read().decode('utf-8')
    # 保存文件至本地
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(html)


# 主程序入口
if __name__ == '__main__':
    word = input('请录入搜索内容:')
    url = get_url(word)
    filename = word + '.htm'
    request_url(url, filename)

如何用Python爬虫抓取网页内容?

比如新浪,QQ等

爬虫流程
其实把网络爬虫抽象开来看,它无外乎包含如下几个步骤
模拟请求网页。模拟浏览器,打开目标网站。
获取数据。打开网站之后,就可以自动化的获取我们所需要的网站数据。
保存数据。拿到数据之后,需要持久化到本地文件或者数据库等存储设备中。
那么我们该如何使用 Python 来编写自己的爬虫程序呢,在这里我要重点介绍一个 Python 库:Requests。
Requests 使用
Requests 库是 Python 中发起 HTTP 请求的库,使用非常方便简单。
模拟发送 HTTP 请求
发送 GET 请求
当我们用浏览器打开豆瓣首页时,其实发送的最原始的请求就是 GET 请求
import requests
res = requests.get('http://www.douban.com')
print(res)
print(type(res))
>>>
<Response [200]>
<class 'requests.models.Response'>
参考技术A

首先,你要安装requests和BeautifulSoup4,然后执行如下代码.

import requests
from bs4 import BeautifulSoup

iurl = 'http://news.sina.com.cn/c/nd/2017-08-03/doc-ifyitapp0128744.shtml'

res = requests.get(iurl)

res.encoding = 'utf-8'

#print(len(res.text))

soup = BeautifulSoup(res.text,'html.parser')

#标题
H1 = soup.select('#artibodyTitle')[0].text

#来源
time_source = soup.select('.time-source')[0].text


#来源
origin = soup.select('#artibody p')[0].text.strip()

#原标题
oriTitle = soup.select('#artibody p')[1].text.strip()

#内容
raw_content = soup.select('#artibody p')[2:19]
content = []
for paragraph in raw_content:
    content.append(paragraph.text.strip())
'@'.join(content)    
#责任编辑
ae = soup.select('.article-editor')[0].text

这样就可以了

本回答被提问者采纳

以上是关于Python进阶篇五Python爬虫的抓取网页的主要内容,如果未能解决你的问题,请参考以下文章

以小饭桌网站为例介绍抓取动态网页的数据python爬虫入门进阶(12)

怎么用Python写爬虫抓取网页数据

python爬虫 入门需要哪些基础

Python+Selenium+PhantomJs爬虫 怎么抓取弹出新标签页的内容

4.python爬虫之新建 scrapy 爬虫项目(抓取和保存)

如何用python抓取百度地图数据