本文作者:bang

网络采集(网络爬虫与数据收集)

bang 2022-04-17 109
网络采集(网络爬虫与数据收集)摘要: 网络收集(网络爬虫和数据收集)...

网络收集(网络爬虫和数据收集)

无论是数据分析、数据建模,甚至是数据挖掘,在做这些高层次的工作之前,都要先收集数据。数据是数据工作的基础,没有数据,挖掘就没有意义。俗话说,聪明的女人离不开米饭,接下来我们就来说说爬行动物。

爬虫是收集外部数据的重要方式。常用于竞争分析,也用于爬虫自身业务。比如搜索引擎就是爬虫的最高应用。当然爬虫不能肆无忌惮。如果你不小心,你可能会成为面向监狱的编程。

1.什么是爬行动物?

爬虫,一般针对特定的网站或App,通过爬虫脚本或程序从指定的页面收集数据。它指的是通过编程向web服务器请求数据(HTML形式),然后解析HTML提取你想要的数据。

数据采集之爬虫篇


一般来说,爬虫需要掌握一门编程语言。要了解HTML、web服务器、数据库等知识,建议从python开始,有很多第三方类库可以快速方便的抓取网页。

二、如何进行网络爬虫

1.先分析网页。


数据采集之爬虫篇



按F12调出网页调试界面,在Element标签下可以看到对应的HTML代码。这些其实是网页的代码。通过解析源代码(如hmtl)可以看到网页是如何加载和呈现的,就像你穿着衣服一样(手动滑稽)。

我们可以找到网页元素。左上角有一个小按钮。点击它,然后在网页上找到你想要定位的地方,你可以直接在这里定位源代码,如下图所示:


数据采集之爬虫篇


我们可以修改源代码,把【python】改成【我是帅哥】。嘿,网页上会有不同的变化。以上主要用于科普,这一块主要是前端工程师领域。你看到的地方都是前端的辛苦,冰山下的地方都是后端工程师的地盘。


数据采集之爬虫篇


有点跑题了。回到主题,网页已经分析过了,可以定位想要爬的元素内容。接下来可以换包写爬虫脚本,可以爬基本网页上能看到的东西,看到的就是得到的。

2.程序如何访问网页?


数据采集之爬虫篇


您可以单击“网络”按钮,查看当我们在浏览器搜索输入框中输入关键字时python经历了什么。涉及的专业内容可能过于复杂。大家感觉可能是我输入了一个关键词,网页给我返回了很多内容。其实在中间,本地客户端向服务器发送了get请求,服务器在中间通过了TCP的三次握手,挥舞了四次,网络安全,加密等。,最后将内容安全地返回到您的本地客户端。你有没有觉得头变大了一点?为了开心上网,工程师真的不

了解这些内容将有助于我们理解爬虫的机制。简单来说,就是模拟一个人登录网页,请求访问,找到返回的网页内容并下载数据的程序。刚才说到网页网络的内容,常见的请求有两种:get请求和POST请求。GET请求在URL上公开请求参数,而POST请求参数放在请求体中。post request方法还对密码参数进行加密,相对安全。

为了模拟访问的请求头,当我们发出http请求时,我们不仅要提交一些参数,还要定义请求的一些头信息,如Accept、Host、cookie、User-Agent等。主要目的是将爬虫程序伪装成常规请求,获取信息内容。

数据采集之爬虫篇


这种爬行动物有点像间谍,闯入当地提取我们想要的信息。这里不清楚,skr~~~

3.请求返回收到的信息。

r = requests.get(\'https://httpbin.org/get\')r.status_code//返回200r.headers{        \'content-encoding\': \'gzip\',        \'transfer-encoding\': \'chunked\',      \'connection\': \'close\',        \'server\': \'nginx/1.0.4\',        \'x-runtime\': \'148ms\',        \'etag\': \'\"e1ca502697e5c9317743dc078f67693f\"\',       \'content-type\': \'application/json\'    }import requestsr = requests.get(\'https://api.github.com/events\')r.json()// 以上操作可以算是最基本的爬虫了,返回内容如下:[{u\'repository\': {u\'open_issues\': 0, u\'url\': \'https://github.com/...

您可以通过解析返回的json字符串来获得所需的数据。恭喜~

三、python自动爬虫实战

接下来,我们来进行一场豆瓣电影排名的爬虫之战:

#!/usr/bin/env python3# -*- coding: utf-8 -*-\"\"\"Created on Wed Jul 31 15:52:53 2019@author: kaluosi\"\"\"import requestsimport reimport codecsfrom bs4 import BeautifulSoupfrom openpyxl import Workbookimport pandas as pd wb = Workbook()dest_filename = \'电影.xlsx\'ws1 = wb.activews1.title = \"电影top250\"DOWNLOAD_URL = \'http://movie.douban.com/top250/\'def download_page(url):    \"\"\"获取url地址页面内容\"\"\"    headers = {        \'User-Agent\': \'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\'    }    data = requests.get(url, headers=headers).content    return datadef get_li(doc):    soup = BeautifulSoup(doc, \'html.parser\')    ol = soup.find(\'ol\', class_=\'grid_view\')    name = []  # 名字    star_con = []  # 评价人数    score = []  # 评分    info_list = []  # 短评    for i in ol.find_all(\'li\'):        detail = i.find(\'div\', attrs={\'class\': \'hd\'})        movie_name = detail.find(\'span\', attrs={\'class\': \'title\'}).get_text()  # 电影名字                level_star = i.find(\'span\', attrs={\'class\': \'rating_num\'}).get_text()  # 评分                star = i.find(\'div\', attrs={\'class\': \'star\'})        star_num = star.find(text=re.compile(\'评价\'))  # 评价        info = i.find(\'span\', attrs={\'class\': \'inq\'})  # 短评        if info:  # 判断是否有短评            info_list.append(info.get_text())        else:            info_list.append(\'无\')        score.append(level_star)        name.append(movie_name)        star_con.append(star_num)    page = soup.find(\'span\', attrs={\'class\': \'next\'}).find(\'a\')  # 获取下一页    if page:        return name, star_con, score, info_list, DOWNLOAD_URL + page[\'href\']    return name, star_con, score, info_list, Nonedef main():    url = DOWNLOAD_URL    name = []    star_con = []    score = []    info = []    while url:        doc = download_page(url)        movie, star, level_num, info_list, url = get_li(doc)        name = name + movie        star_con = star_con + star        score = score + level_num        info = info + info_list    #pandas处理数据    c = {\'电影名称\':name , \'评论人数\':star_con , \'电影评分\':score , \'评论\':info}    data = pd.DataFrame(c)    data.to_excel(\'豆瓣影评.xlsx\')if __name__ == \'__main__\':    main()

写在最后


觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享