爬虫是采集外部数据的重要方式,如何进行网页爬虫
优采云 发布时间: 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()
写在最后
最后,这个文章爬虫仅限于交流和学习。