如何抓取网页数据( 前端工程师如何进行网页爬虫?如何做好网页解析?)

优采云 发布时间: 2021-12-08 20:18

  如何抓取网页数据(

前端工程师如何进行网页爬虫?如何做好网页解析?)

  如何采集网站数据(如何快速抓取网页数据)

  无论是数据分析、数据建模甚至数据挖掘,我们都必须在执行这些高级任务之前进行数据处理。数据是数据工作的基础。没有数据,挖掘毫无意义。俗话说,巧妇难为无米之炊,接下来说说爬虫。

  爬虫是采集外部数据的重要途径。常用于竞争分析,也有应用爬虫进入自己的业务。例如,搜索引擎是最高的爬虫应用程序。当然,爬虫也不能肆无忌惮。如果他们不小心,他们可能会成为面向监狱的编程。

  一、什么是爬虫?

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

  

  一般来说,爬虫需要掌握一门编程语言。了解HTML、Web服务器、数据库等,建议从python入手快速上手,有很多第三方库可以快速轻松的抓取网页。

  二、如何抓取网页

  1、 网页分析先

  

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

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

  

  我们可以修改源码看看,把定位到的源码【python】改成【我是帅哥】,嘿嘿,网页上会出现不同的变化。以上主要是为了科普。这主要是前端工程师的领域。大家看到的地方都是前端的辛苦,后端工程师都在冰山之下。

  

  有点跑题了,回归正题,网页已经解析完毕,你要爬取的元素的内容就可以定位了。下一步就是打包编写爬虫脚本。基本网页上能看到的一切都可以爬取,所见即所得。

  2、程序如何访问网页

  

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

  了解这些内容有助于我们了解爬虫机制。简单来说,它是一个模拟人登录网页、请求访问、查找返回的网页内容并下载数据的程序。刚才讲了网页网络的内容。常见的请求包括 get 和 post。GET 请求在 URL 上公开请求参数,而 POST 请求参数放在请求正文中。POST 请求方法还会对密码参数进行加密。,所以相对来说比较安全。

  程序应该模拟请求头(Request Header)进行访问。我们在进行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 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 requestsimport reimport codecsfrom bs4 import BeautifulSoupfrom openpyxl import Workbookimport 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 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()

  写在最后

  最后,这次文章的爬虫仅限于交流和学习。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线