什么是数据爬虫,抖音和电商数据爬虫详解?

营销圈公众号引导关注

不管是数据分析,还是数据建模乃至数据挖掘,在进行这些高大上的工作之前我们都要进行数据采集,数据是数据工作的基础,没有数据,挖掘也没有意义。俗话说,巧妇难为无米之炊,所以,接下来我们来聊下爬虫。

爬虫是采集外部数据的重要的方式。常用于竞对分析,也有将爬虫应用成自身的业务,如搜索引擎就是爬虫最高的应用。当然,爬虫也不是可以肆无忌惮的,一不小心可能就变成面向监狱式编程了。

一、什么是爬虫?

爬虫抓取,一般是针对特定的网站或App,通过爬虫脚本或程序对指定的页面进行数据采集。是指通过编程向网络服务器请求数据(HTML表单),然后解析HTML,提取出自己想要的数据。

一般而言,爬虫需要掌握一门编程语言,要了解HTML、网络服务器、数据库等知识,建议从python入门,能快速上手爬虫,并且有很多第三方的类库,能快速方便地进行网页爬虫。

二、如何进行网页爬虫

1、先进行网页解析

按一下F12,即可调出网页调试界面,可以看到Element 标签下对应的 HTML代码,这些其实就是网页的代码,网页都是通过解析hmtl等源码,通过加载、渲染展示成大家看到的样子,就像穿了衣服化妆打扮的你(手动滑稽)。

我们可以进行网页元素的定位,左上角有个小按钮,点一下它然后在网页上找到你想定位的地方,就可以直接定位到此处的源码,如下图所示:

什么是数据爬虫,抖音和电商数据爬虫详解?

我们可以修改下源码看看,将定位到的源码处【python】改成【我是帅哥】,哎嘿,网页上就会发生不一样的变化。以上主要做科普作用,这块主要还是前端工程师的领域,所有大家看到的地方都是前端地辛苦付出,冰山下的都是后端工程师的地盘。

有点跑题了,回归正题,网页解析到了,可以定位到想要爬去的元素内容了,接下来就是调包写爬虫脚本,基本网页上能看到的都可以爬取,所见即所得。

2、程序如何访问网页

可以点击Network按钮,查看我们在浏览器搜索输入框输入一个关键词:python都经历了什么。涉及的专业内容可能过于复杂,大家感觉到的可能就是我输入了一个关键词,网页给我返回很多内容,其实中间是本地客户端发送一个get请求到服务器端,服务器端通过解析内容,中间经过TCP的三次握手,四次挥手,网络安全、加密等,最后安全地把内容返回到你本地的客户端上,是不是感觉头都开始有点大了,为了我们能快乐地在网络上冲浪,工程师们真的不容易~~

了解了这些内容,有助于帮助我们理解爬虫的机制。简单来说,就是一段程序,模拟人去登录网页,进行请求访问,找到返回的网页内容并把数据下载下来。刚才说到网页network的内容,常见的请求有get、post两种,GET请求把请求参数都暴露在URL上,而POST请求的参数放在request body 里面,POST请求方式还对密码参数加了密,这样就相对安全一些。

程序要模拟请求头(Request Header)进行访问,我们在做http请求的时候除了提交一些参数之外,还定义一些请求的头部信息,比如Accept、Host、cookie、User-Agent等等,主要就是将爬虫程序伪装成正规请求,获取情报内容。

什么是数据爬虫,抖音和电商数据爬虫详解?

爬虫就有点像间谍,打入地方内部,套取出我方想要的情报,此处不明觉厉,skr~~~

3、请求返回的接收信息

r = requests.get('https://httpbin.org/get')
r.status_code
//返回200
r.headers
{    
    'content-encoding': 'gzip',    
    'transfer-encoding': 'chunked',  
    'connection': 'close',    
    'server': 'nginx/1.0.4',    
    'x-runtime': '148ms',    
    'etag': '"e1ca502697e5c9317743dc078f67693f"',   
    'content-type': 'application/json'
    
}
import requests
r = 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 requests
import re
import codecs
from bs4 import BeautifulSoup
from openpyxl import Workbook
import pandas as pd 

wb = Workbook()
dest_filename = '电影.xlsx'
ws1 = wb.active
ws1.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 data


def 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, None


def 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()

写在最后

最后说一句,本次文章的爬虫仅限于交流学习使用。爬虫需谨慎,一不小心就面向监狱式编程了

好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!

版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱yingxiaoo@foxmail.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.yingxiaoo.com/161447.html