python 简单爬虫

2021/7/18 17:05:59

本文主要是介绍python 简单爬虫,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、python爬虫程序主结构

  1、爬取网页
def askUrl(url): # ask a web request. os.environ['NO_PROXY'] = 'movie.douban.com' # 解决此请求方式代理问题 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63" } req = requests.get(url, headers=headers) print(req.status_code) # 查看请求状态(200为成功) html = "" try: html = req.content.decode("utf-8") print(html) except requests.exceptions.ConnectionError as e: print("url连接错误:", e) return html

使用python的requests库可以轻松的爬取网页,请求方式一般常用的有get方式和post方式。当响应码code为200时,意味着我们成功地爬取到了网页的数据。对于某些有反爬或者需要登录的网页,可以进一步的设置代理、添加请求headers参数,常用的headers参数头有"User-Agent”、“cookie"、"host"等,可在对应网页打开开发人员工具,在网络选项的请求标头中获取:

 

 

 2、解析爬取的网页数据

    爬取到的网页响应数据是html格式的数据,包含着网页各个元素的数据,我们需要通过解析html,来获取我们需要数据。现在python3常用的解析html数据的第三方库为BeautifulSoup,也即bs4。下面是通过某构造的html数据,来说明bs4用法的例子,也是网上常见的内容。

假如某网页的返回数据如下:

html_doc = """
<html>
<head>
    <title>The Dormouse's story</title>
    <title>The test's story</title>
</head>
<body>
<p class="title aq">
    <b>
        The Dormouse's story
    </b>
</p>

<tr >
    <th>
        "首量时间"
    </th>
    <td>
        2021-07-17
    </td>
    <th>
        "量产时间"
    </th>
    <td>
        2021-07-18
    </td>
</tr>

<p class="story">Once upon a time there were three little sisters; and their names were
    <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
    <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> 
    and
    <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
    and they lived at the bottom of a well.
</p>

现在我只想要其中"首量时间"和"量产时间"两个数据,那么我可以通过下面的解析方法来获取:

def parseData(html):
    dataList = []
    data = []
    # html字符串创建BeautifulSoup对象
    soup = BeautifulSoup(html, 'html.parser')
    sortSoup = soup.find_all('td')
    print(sortSoup)
    for sort in sortSoup:
        time = (sort.string).strip()
        data.append(time)
    dataList.append(data)
    return dataList

首先通过 soup = BeautifulSoup(html, 'html.parser') 将html数据按标准的缩进格式输出,然后通过 sortSoup = soup.find_all('td')找到我所需要的两个时间数据,此时返回为:

<td>
        2021-07-17
</td>
<td>
        2021-07-18
</td>

很明显包含不属于数据的<td>和空格、换行等,再通过 time = (sort.string).strip() 对数据进处理就得到了我们真正需要的"2021-07-17"、"2021-07-18"这两个时间数据。

对于更复杂的html数据,使用上面简单的解析方式可能并不能满足,需要了解更多的bs4解析格式,或者使用正则法则(re库)去解析得到我们需要的数据。

3、保存数据/操作数据

    解析得到我们需要的数据后,我们一般会保存数据至Excel表格或数据库等,下面是保存至Excel表格的例子:

def saveDataToExcel(dataList):
    # 保存数据到表格
    savePath = "timeData.xls"
    workBook = xlwt.Workbook(encoding='utf-8', style_compression=0)
    workSheet = workBook.add_sheet('机型各阶段时间', cell_overwrite_ok=True)
    col = ("机型名", "首量时间", "量产时间")
    for i in range(0, 3):
        workSheet.write(0, i, col[i])
    for data in dataList:
        for j in range(0, 3):
            workSheet.write(1, j, data[j])
    workBook.save(savePath)

首先创建表格,并把表头数据构建好,然后循环将数据写入表格。对于数据库也是一样的,只不过多一个连接数据库的初始化过程。

    如果想要数据表现得更加直观,我们可能还会用到第三方工具对数据进行展示,比如用Apache ECharts中各种丰富的表格模板来展示我们提取出的数据,我们需要进一步的操作我们的数据以使用模板。

二、爬虫的要点

    从前面爬虫主体的介绍可以知道,其实爬虫的步骤很清晰明了,第一步请求网页,第二部解析数据、第三部保存数据。那么从这三个过程看出爬虫的要点是什么呢?我觉得至少有下面这两点:

1、获取到网页正确的返回数据;

2、数据解析:包括对源数据进行提取的一个过程和数据保存过程中的处理。

    对于第1点,获取到网页正确相应数据是爬虫的前提。你可能会遇到反爬的网页、需要登录的网页、你可能需要不止一个页面的数据等等,这时候如何能够得到网页的正确响应,如何正确拼接不同页面的网址就是你在请求网页时需要解决的问题;

    对于第2点,未经处理的数据等同于无用数据,一般我们想要爬取的网页数据肯定不可能像前面例子中那样简单,这个时候如何快速准确地提取我们需要的数据就变得很重要,我们需要非常熟练地清楚bs4的各种解析方法,包括正则法则等其他一些数据解析的方法,以及使用第三方工具展示数据的处理方法,这个是爬虫程序中占比相当大的部分。

三、总结

    爬虫程序并不复杂,其框架简单明了,如果想要在日常生活中使用爬虫程序爬取一些你想要的数据,最有效的方式就是打开你的python,去请求你想要的网页的数据,当你成功获取到响应数据后,就想方设法地解析得到你想要的数据,遇到一个问题解决一个问题,在你不断成功获取你想要的数据时,你爬取数据和解析数据的能力也就不断积累起来了。

 



这篇关于python 简单爬虫的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程