python3编程04--初识爬虫和初步实战

爬虫定义:

狭义定义:模拟浏览器浏览网页,并保存关心的数据的程序。

广义定义:自动下载网络数据的程序。网络数据包括:网页数据/游戏数据/App数据等等

简单起见,这里仅讨论的是基于网页的爬虫。

 

通过浏览器上网的流程:

首先在浏览器输入网址(URL),回车后向浏览器发起Requests请求,服务器通过域名解析得到HTML等文件的内容并Response返回给浏览器,最终浏览器将这些文件渲染成我们看到的页面。如下图所示:

我们爬虫关心的重点是Requests与Response。

爬虫流程:

下载数据:

        下载的其实是HTML/json等文件

        工具:通过requests套件下载,用命令pip install requests安装

解析数据:

        解析下载的数据,获取需要的信息

        解析的对象是HTML等文件

        工具:通过xpath或bs4.BeautifulSoup套件解析,BeautifulSoup用命令pip install BeautifulSoup4安装

保存数据:

        保存在本地

        保存到数据库

编写爬虫获得网页数据

准备工作:

  1. 安装python3
  2. 安装Jupyter:pip install jupyter
    1. 启动:jupyter notebook
    2. 弹出的浏览器中,找到New--->Python3
    3. 写入python语句,按shift + enter 运行。
  3. 安装python爬虫套件:

            requests:pip install requests

            Beautifulsoup4:pip install BeautifulSoup4

  下载数据:    

import requests

res = requests.get('https://news.sina.com.cn/china/')

res.encoding = 'utf-8'

print(res.text)

    解析HTML数据:

       通过BeautifulSoup4可以将HTML数据解析成树形结构的数据,之后通过select()方法取得相应标签的数据。

from bs4 import BeautifulSoup
html_sample='''
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>这是页面标题</title>
</head>
<body>
    <h2 id="title">这是标题</h2>
    <p class='p1'>段落1</p>
    <p class='p2'>段落2</p>
    <a href="" class='link'>链接</a>
</body>
</html>
'''
soup = BeautifulSoup(html_sample,'html.parser')
print(soup)

取得h2标签内容:

#使用select取出h2标签的内容
soup = BeautifulSoup(html_sample, 'html.parser')
header = soup.select('h2')
print(header)

发现上图得到的是一个list,这个list只有1个元素。通过下图方式获得h2标签的内容:

#抓取h2标签的内容
header[0].text

除了可以通过标签名来抓取对应标签内容外,还可以通过id或者class的值来查找相应内容:

#通过id抓取标签内容
soup.select('#title')[0].text
#通过class抓取标签内容
soup.select('.p2')[0].text
#通过class抓取标签内容
soup.select('.link')[0].text

 

注意:select()方法,如果是id="xxx" 则select(’#xxx‘); 如果是class=“xxx”,则select(’.xxx‘),和css规则一致,不要漏掉井号“#”或句点“.”

小结:

以上是假定一个简单的html文件,通过BeautifulSoup4套件工具来解析出相应标签的内容。

 

爬虫实战:

爬取新闻网址的新闻中标题、新闻时间、新闻责任编辑……

新闻网站URL: 

进入新浪新闻网站:https://news.sina.com.cn/china/

往下找到任意一条新闻:

得到该新闻的URL:   https://news.sina.com.cn/o/2018-11-13/doc-ihmutuea9882421.shtml

注意:该链接会失效,找到任意一条可以浏览的新闻地址代替即可。

1. 下载数据

import requests
res = requests.get('https://news.sina.com.cn/o/2018-11-13/doc-ihmutuea9882421.shtml')
res.encoding = 'utf-8'
source = res.text
print(source)

 

 2.解析数据

    谷歌浏览器打开上一步URL,空白处右键--->检查

获取标题所在的class=“main-title”

   > 抓取新闻标题

#取出标题,网页查询标题所在的类为 .main-title
from bs4 import BeautifulSoup
soup = BeautifulSoup(source, 'html.parser')
title = soup.select('.main-title')[0].text
print(title)

>抓取新闻时间

找到新闻时间所在的类class=“date”

#抓取新闻时间,class=“date”
soup.select('.date')[0].text

>抓取新闻责任编辑

找到新闻责任编辑所在的类class=“show_author”

 

#抓取新闻责任编辑,class=“show_author”
soup.select('.show_author')[0].text
#抓取新闻责任编辑,class=“show_author”,并只保留责任编辑的姓名
soup.select('.show_author')[0].text.lstrip('责任编辑:')

 

 

完成! enjoy it!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值