爬虫是采集外部数据的重要方式,如何进行网页爬虫

优采云 发布时间: 2021-07-16 22:12

  

爬虫是采集外部数据的重要方式,如何进行网页爬虫

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

  无论是数据分析、数据建模还是数据挖掘,我们都必须先进行数据采集,然后才能进行这些高层次的任务。数据是数据工作的基础。没有数据,挖掘毫无意义。俗话说,巧妇难为无米之炊,接下来说说爬虫。

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

  一、什么是爬虫?

  爬虫爬取一般针对特定的网站或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人工客服


线