如何快速抓取网页上的数据 如何采集网站数据

如何收集网站数据(如何快速抓取网页上的数据)
无论是数据分析、数据建模甚至是数据挖掘,在做这些高层次的工作之前,我们都要收集数据 。数据是数据工作的基?。挥惺? ,挖掘就没有意义 。俗话说,巧妇难为无米之炊,接下来就说说爬虫吧 。
爬虫是收集外部数据的重要方式 。它经常用于竞争分析,但也在自己的业务爬虫使用 。比如搜索引擎就是爬虫的最高应用 。当然,爬虫也不能肆无忌惮 。一不小心就可能变成监狱导向的编程 。
1.什么是爬行动物?爬虫,一般针对特定的网站或App,通过爬虫脚本或程序从指定的页面收集数据 。是指通过编程向网络服务器请求数据(HTML形式),然后解析HTML提取你想要的数据 。
【如何快速抓取网页上的数据 如何采集网站数据】一般来说,爬虫需要掌握一门编程语言 。要了解HTML、web服务器、数据库等知识,建议从python入手,可以快速上手爬虫 。有很多第三方类库可以快速方便的抓取网页 。
二、如何抓取网页1.首先,分析网页 。
点击F12 , 调出网页调试界面 , 在元素页签下可以看到相应的HTML代码 。这些其实是网页的代码 。网页通过解析hmtl等源代码,加载渲染 , 展现给大家 , 就像你打扮好了一样(手动滑稽) 。
我们可以定位网页元素 。左上角有一个小按钮 。点击它,在网页上找到你想要定位的地方 , 就可以直接在这里定位源代码,如下图所示:
我们可以修改源代码,把定位的源代码【python】改成【我是帅哥】 。呵呵,网页上会有不同的变化 。以上主要用于科普,这个主要是前端工程师的领域 。你看到的地方都是前端工程师的辛苦,冰山下面的地方都是后端工程师的地盘 。
有点跑题了 。回到正题,网页已经解析完毕,你可以定位你要抓取的元素的内容 。接下来,您可以切换包并编写爬虫脚本 。你可以抓取你在基本网页上看到的所有内容 。所见即所得 。
2.程序如何访问网页?
你可以点击网络按钮 , 在浏览器搜索输入框中输入一个关键词 , 看看我们在python中经历了什么 。涉及的专业内容可能太复杂了 。你感受到的可能是我输入了一个关键词,网页给我返回了很多内容 。其实中间是本地客户端向服务器发送get请求 , 服务器解析内容 , 中间经过TCP三次握手,四次挥手 , 最后将内容安全返回给你的本地客户端 。你有没有觉得你的头有点大了?为了我们开心的上网 , 工程师真的没有
了解这些内容有助于我们理解爬虫的机制 。简单来说就是模拟人登录一个网页,请求访问,找到返回的网页内容并下载数据的程序 。刚才说到网页网络的内容,有两个常见的请求:get和post 。GET请求在URL上公开请求参数,而POST请求将参数放在请求体中 。POST请求还加密密码参数,这使得它相对安全 。
为了模拟访问的请求头,当我们发出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 = https://m.laogu.cc/requests.get(url, headers=headers).contentreturn 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_URLname = []star_con = []score = []info = []while url:doc = download_page(url)movie, star, level_num, info_list, url = get_li(doc)name = name + moviestar_con = star_con + starscore = score + level_numinfo = info + info_list#pandas处理数据c = {'电影名称':name , '评论人数':star_con , '电影评分':score , '评论':info}data = https://m.laogu.cc/pd.DataFrame(c)data.to_excel('豆瓣影评.xlsx')if __name__ == '__main__':main()

推荐阅读