Python爬虫进阶 - Go语言中文社区

Python爬虫进阶


准备

Python环境

首先,是Python环境。
有两种选择,一种是去Python官网下载,网址是:https://www.python.org/downloads/;另外一种方法是到Anaconda官网下载,网址是:https://www.continuum.io/downloads
Anaconda官网下载页面截图:
Anaconda官网下载页面截图
访问Anaconda官网需要翻墙,而且下载速度堪称龟速,但幸运的是,清华大学开源镜像站上面有Anaconda的安装镜像,大家可以去那里下载,下载速度也比较快,网址是:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
这里写图片描述
博主强烈推荐大家安装Anaconda,因为接下来我们还需要安装几个工具包,对Windows用户来说,使用Python原生环境安装是非常困难的,而使用Anaconda则容易的多,而且Anaconda里面也内嵌了Python编程环境。
由于博主安装的是Anaconda,所以下面以Anaconda为例继续讲解。
安装Anaconda也很容易,下载Anaconda镜像后,双击运行即可开始安装。

requests、BeautifulSoup4、jupyter工具包

安装好Anaconda后,打开命令行,进入Anaconda安装目录下的Scripts目录,如图:
这里写图片描述
输入“pip install requests”,回车,安装requests;
输入“pip install BeautifulSoup4”,回车,安装BeautifulSoup4;
输入“pip install jupyter”,回车,安装jupyter;
安装好后,输入“jupyter notebook”打开jupyter
如图:
这里写图片描述
这里写图片描述

编写

打开新浪网,点击鼠标右键—>点击检查,或者直接按F12打开开发者模式:
这里写图片描述
这里写图片描述
复制网址,来到jupyter编辑页面
这里写图片描述

import requests #导入requests工具包
res = requests.get('http://news.sina.com.cn/china/')
res.encoding = 'utf-8' #指定编码类型
print(res.text) #打印网页源代码

获取到网页源代码之后,我们面临的一个问题是如何把非结构化的数据转换成结构化的数据,还有如何把我们需要的数据提取出来。这时,BeautifulSoup4就会派上用场了,先来看一下范例 :
这里写图片描述
从上图可以看到,经过BeautifulSoup4的转换,网页源代码中的标签被去掉了,得到的是标签中的内容。
但是这样还远远不够,因为有时候我们所需的元素处在一些特殊的标签之中,我们想要获得一个或一组标签(包括内容和属性),这时需要用到的是select方法,看范例:

from bs4 import BeautifulSoup
html_sample = '
<html>
<body>
<h1 id="title">Hello World</h1>
<a href="#" class="link">This is link1</a>
<a href="# link2" class="link">This is link2</a>
</body>
</html>'
soup = BeautifulSoup(html_sample, "html.parser")

header = soup.select('h1')#获取所有h1标签,返回的是列表
alinks = soup.select('a')#获取所有a标签
tag = soup.select('#title')#获取id为“title”的标签
tag1 = soup.select('.link')#获取class为“link”的标签

#迭代取出每个链接中的地址
for link in alinks:
    print(link['href'])#每一个标签中的属性和属性值都被包装成了一个字典,所以我们可以通过key来索引value
    print(link['class'])

print(tag1)
print(header)#打印的是整个列表
print(header[0])#打印列表中的第一个元素
print(header[0]['id'])#打印列表中的第一个元素的id

print(type(soup))
print(soup.text)

运行结果:
运行结果

如果存在标签嵌套的情况,可以用空格隔开表示层级关系。比如下面这段HTML代码,span标签里面嵌套着另一个span标签,里面的span标签又存在着嵌套,如果我想获取最里面的a标签,应该怎么办呢?看代码:

html_sample = '
<span class="time-source" id="navtimeSource">
    2017年08月03日07:24
    <span>
        <span data-sudaclick="media_name">
            <a href="#" target="_blank" >环球网</a>
        </span>
    </span>
</span>'
soup = BeautifulSoup(html_sample, "html.parser")
link = soup.select('.time-source span span a')
print(link)

运行结果:
这里写图片描述
可以看到获得了a标签

完整的爬取新浪网新网资讯的爬虫代码请见:爬取新浪网的新闻资讯并保存 http://download.csdn.net/detail/young2415/9922644

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/young2415/article/details/76616887
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:42:10
  • 阅读 ( 1052 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢