-
2020-11-29 14:05:28
爬虫:
网络爬虫是捜索引擎抓取系统(Baidu、Google等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
步骤:
第一步:获取网页链接
1.观察需要爬取的多网页的变化规律,基本上都是只有小部分有所变化,如:有的网页只有网址最后的数字在变化,则这种就可以通过变化数字将多个网页链接获取;
2.把获取得到的多个网页链接存入字典,充当一个临时数据库,在需要用时直接通过函数调用即可获得;
3.需要注意的是我们的爬取并不是随便什么网址都可以爬的,我们需要遵守我们的爬虫协议,很多网站我们都是不能随便爬取的。如:淘宝网、腾讯网等;
4.面对爬虫时代,各个网站基本上都设置了相应的反爬虫机制,当我们遇到拒绝访问错误提示404时,可通过获取User-Agent 来将自己的爬虫程序伪装成由人亲自来完成的信息的获取,而非一个程序进而来实现网页内容的获取。
第二步:数据存储
1.爬虫爬取到的网页,将数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的;
2.引擎在抓取页面时,会做一定的重复内容检测,一旦遇到访问权重很低的网站上有大量抄袭、采集或者复制的内容,很可能就不再爬行;
3.数据存储可以有很多方式,我们可以存入本地数据库也可以存入临时移动数据库,还可以存入txt文件或csv文件,总之形式是多种多样的;
第三步:预处理(数据清洗)
1.当我们将数据获取到时,通常有些数据会十分的杂乱,有许多必须要的空格和一些标签等,这时我们要将数据中的不需要的东西给去掉,去提高数据的美观和可利用性;
2.也可利用我们的软件实现可视化模型数据,来直观的看到数据内容;
第四步:数据利用
我们可以把爬取的数据作为一种市场的调研,从而节约人力资源的浪费,还能多方位进行对比实现利益及可以需求的最大化满足。
小结:
python可以用来爬数据,但是python不是专门用来做爬虫的,Python可以做很多事情。它在做爬虫方面有一定的优势,它写起来比较方便,简洁,爬取速度快,处理cookie,验证码等等爬虫常见问题也方便,是一门很有价值的语言。
更多相关内容 -
python爬虫爬取网页数据并解析数据
2020-12-16 22:54:12网络爬虫可以代替手工做很多事情,比如可以用于做搜索引擎,也可以爬取网站上面的图片,比如有些朋友将某些网站上的图片全部爬取下来,集中进行浏览,同时,网络爬虫也可以用于金融投资领域,比如可以自动爬取一些... -
python爬虫爬取网页表格数据
2020-09-20 17:53:15主要为大家详细介绍了python爬虫爬取网页表格数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Python爬虫爬取网页数据并存储(一)
2018-10-27 20:53:48Python爬虫爬取京东网页信息并存储环境搭建爬虫基本原理urllib库使用requests库使用正则表达式创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式...环境搭建
1.需要事先安装anaconda(或Python3.7)和pycharm
*anaconda可在中科大镜像下下载较快
2.安装中遇到的问题:
*anaconda(记得安装过程中点添加路径到path里,没添加的话手动添加:
计算机右键属性——高级系统设置——环境变量——用户/系统变量path路径中,添加 C:\Users\Aurora\Anaconda3;(anaconda安装路径))
打开jupyter notebook ,出现页面空白解决方案:
打开 C:\Users\自己的用户名.jupyter\jupyter_notebook_config.py
在末尾输入以下代码:
import webbrowser
webbrowser.register(“Chrome”, None, webbrowser.GenericBrowser(u"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"))
c.NotebookApp.browser = u’Chrome’
##浏览器名,浏览器路径(通过右键属性可以看到路径)*anaconda ,打开cmd/anaconda prompt,输入conda list 即可查看已有的包,还需添加可用 conda install package_name 来添加 在本次网络爬虫过程中,我们需要的库有: re,urllib(这两个库为Python内置库,不需要添加),requests,lxml(anaconda中已存在,Python3.7安装装需要使用pip,下载whl软件),beautifulsoup4,json *pycharm基础设置问题: 设置为conda环境下Python3.7
爬虫基本原理
什么是爬虫?
爬虫是请求网站并提取数据的自动化程序从简单的例子开始:
我们随便打开一个网站,我们在百度上搜索新闻,右键,审查元素
会得到这样一个响应,点Name那一栏唯一的一个news.baidu.com,我们会发现以下信息:
我们就通过这些html代码来获取信息。
让计算机代替人工来提取信息就是我们要用Python所要实现的任务。
所以我们就可以通过以上过程总结爬虫的基本原理
1.发出请求:即发出一个Request
2.获取响应内容:如果服务器正常响应就可以得到一个Response
3.解析内容:得到的内容是HTML,可以用正则表达式,网页解析库进行解析。
4.保存数据urllib库使用
urllib.request 请求模块
//简单使用 import urllib.request request = urllib.request.Request('http://www.baidu.com') response = urllib.request.urlopen(request) print(response.read(),decode('utf-8'))
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
(建议用下面的requests库而不使用urllib库)
requests库使用
解析json
// import json import requests response = request.get("http://httpbin.org/get") print(response.json())
//添加headers参数(应对一些反爬虫的最简单的方法) //以猫眼电影top100为例 import requests url = 'https://maoyan.com/board/4?offset=0' headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'} response = requests.get(url,headers = headers) response.encoding = 'utf-8'
正则表达式
一个示例
import requests from requests.exceptions import RequestException import re import json def get_one_page(url,headers): try: response = requests.get(url,headers = headers) response.encoding = 'utf-8' if response.status_code == 200: return response.text return None except RequestException: return None def parse_one_page(html): //提取网页信息的正则表达式 pattern = re.compile('<dd>.*?board-index.*?>(\d*)</i>.*?data-src="(.*?)".*?name"><a' +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)(/p)' +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S) items = re.findall(pattern,html) for item in items: yield { 'index':item[0], 'image': item[1], 'title': item[2], 'actor': item[3].strip()[3:], 'time': item[4].strip()[5:], 'score': item[5]+item[6] } //写入result.txt文件中 def write_to_file(content): with open('result.txt', 'a') as f: f.write(json.dumps(content) + '\n') f.close() def main(): //猫眼电影爬取需添加headers,从用户角度访问 url = 'https://maoyan.com/board/4?offset=0' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} html = get_one_page(url, headers) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == '__main__': main()
运行结果:
上述例子为抓取一页信息并存储,若要抓取多页的信息,需要引入Pool模块,用多线程并发抓取,如下构造:def main(offset): url = 'https://maoyan.com/board/4?offset=0' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} html = get_one_page(url, headers) for item in parse_one_page(html): print(item) write_to_file(item) if __name__ == '__main__': p = Pool() p.map(main.[i*10 for i in range(10)]
-
python爬虫:爬取动态网页内容
2019-04-27 20:00:47python爬虫:爬取动态生成的DOM节点渲染数据结果,该方式不是直接拿到接口进行解析,而是XHR中看不到数据,检查网页又能看到,普通爬虫爬取下来的结果是看不到爬取到的这个数据所在的div的。 -
python爬虫教程:实例讲解Python爬取网页数据
2021-01-20 03:22:06这篇文章给大家通过实例讲解了Python爬取网页数据的步骤以及操作过程,有兴趣的朋友跟着学习下吧。 一、利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('... -
Python:六步教会你使用python爬虫爬取数据
2021-11-05 21:09:26用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。 python爬出六部曲 第一步:安装requests库和BeautifulSoup...前言:
用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。
python爬出六部曲
第一步:安装requests库和BeautifulSoup库:
在程序中两个库的书写是这样的:
import requests from bs4 import BeautifulSoup
由于我使用的是pycharm进行的python编程。所以我就讲讲在pycharm上安装这两个库的方法。在主页面文件选项下,找到设置。进一步找到项目解释器。之后在所选框中,点击软件包上的+号就可以进行查询插件安装了。有过编译器插件安装的hxd估计会比较好入手。具体情况就如下图所示。
第二步:获取爬虫所需的header和cookie:
我写了一个爬取微博热搜的爬虫程序,这里就直接以它为例吧。获取header和cookie是一个爬虫程序必须的,它直接决定了爬虫程序能不能准确的找到网页位置进行爬取。
首先进入微博热搜的页面,按下F12,就会出现网页的js语言设计部分。如下图所示。找到网页上的Network部分。然后按下ctrl+R刷新页面。如果,进行就有文件信息,就不用刷新了,当然刷新了也没啥问题。然后,我们浏览Name这部分,找到我们想要爬取的文件,鼠标右键,选择copy,复制下网页的URL。就如下图所示。
复制好URL后,我们就进入一个网页Convert curl commands to code。这个网页可以根据你复制的URL,自动生成header和cookie,如下图。生成的header和cookie,直接复制走就行,粘贴到程序中。
#爬虫头数据 cookies = { 'SINAGLOBAL': '6797875236621.702.1603159218040', 'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V', 'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ', '_s_tentry': 'www.baidu.com', 'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com', 'Apache': '7782025452543.054.1635925669528', 'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256', } headers = { 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'cross-site', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Language': 'zh-CN,zh;q=0.9', } params = ( ('cate', 'realtimehot'), )
复制到程序中就像这样。这是微博热搜的请求头。
第三步:获取网页:
我们将header和cookie搞到手后,就可以将它复制到我们的程序里。之后,使用request请求,就可以获取到网页了。
#获取网页 response = requests.get('https://s.weibo.com/top/summary', headers=headers, params=params, cookies=cookies)
第四步:解析网页:
这个时候,我们需要回到网页。同样按下F12,找到网页的Elements部分。用左上角的小框带箭头的标志,如下图,点击网页内容,这个时候网页就会自动在右边显示出你获取网页部分对应的代码。
如上图所示,我们在找到想要爬取的页面部分的网页代码后,将鼠标放置于代码上,右键,copy到selector部分。就如上图所示。
第五步:分析得到的信息,简化地址:
其实刚才复制的selector就相当于网页上对应部分存放的地址。由于我们需要的是网页上的一类信息,所以我们需要对获取的地址进行分析,提取。当然,就用那个地址也不是不行,就是只能获取到你选择的网页上的那部分内容。
#pl_top_realtimehot > table > tbody > tr:nth-child(1) > td.td-02 > a #pl_top_realtimehot > table > tbody > tr:nth-child(2) > td.td-02 > a #pl_top_realtimehot > table > tbody > tr:nth-child(9) > td.td-02 > a
这是我获取的三条地址,可以发现三个地址有很多相同的地方,唯一不同的地方就是tr部分。由于tr是网页标签,后面的部分就是其补充的部分,也就是子类选择器。可以推断出,该类信息,就是存储在tr的子类中,我们直接对tr进行信息提取,就可以获取到该部分对应的所有信息。所以提炼后的地址为:
#pl_top_realtimehot > table > tbody > tr > td.td-02 > a
这个过程对js类语言有一定了解的hxd估计会更好处理。不过没有js类语言基础也没关系,主要步骤就是,保留相同的部分就行,慢慢的试,总会对的。
第六步:爬取内容,清洗数据
这一步完成后,我们就可以直接爬取数据了。用一个标签存储上面提炼出的像地址一样的东西。标签就会拉取到我们想获得的网页内容。
#爬取内容 content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"
之后我们就要soup和text过滤掉不必要的信息,比如js类语言,排除这类语言对于信息受众阅读的干扰。这样我们就成功的将信息,爬取下来了。
fo = open("./微博热搜.txt",'a',encoding="utf-8") a=soup.select(content) for i in range(0,len(a)): a[i] = a[i].text fo.write(a[i]+'\n') fo.close()
我是将数据存储到了文件夹中,所以会有wirte带来的写的操作。想把数据保存在哪里,或者想怎么用,就看读者自己了。
爬取微博热搜的代码实例以及结果展示:
import os import requests from bs4 import BeautifulSoup #爬虫头数据 cookies = { 'SINAGLOBAL': '6797875236621.702.1603159218040', 'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V', 'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ', '_s_tentry': 'www.baidu.com', 'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com', 'Apache': '7782025452543.054.1635925669528', 'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256', } headers = { 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'cross-site', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Language': 'zh-CN,zh;q=0.9', } params = ( ('cate', 'realtimehot'), ) #数据存储 fo = open("./微博热搜.txt",'a',encoding="utf-8") #获取网页 response = requests.get('https://s.weibo.com/top/summary', headers=headers, params=params, cookies=cookies) #解析网页 response.encoding='utf-8' soup = BeautifulSoup(response.text, 'html.parser') #爬取内容 content="#pl_top_realtimehot > table > tbody > tr > td.td-02 > a" #清洗数据 a=soup.select(content) for i in range(0,len(a)): a[i] = a[i].text fo.write(a[i]+'\n') fo.close()
-
python爬虫爬取网页指定数据(百度百科)
2021-11-22 00:24:48首先我选取的爬取数据是所有季度参演过的嘉宾然后检查网页代码,找到要爬取的数据那部分,这里需要爬取的是table标签 我用的是jupyter notebook写的代码,设置url与Headers,先写一个爬取下来数据保存到json文件的...首先我选取的爬取数据是所有季度参演过的嘉宾
然后检查网页代码,找到要爬取的数据那部分,这里需要爬取的是table标签
我用的是jupyter notebook写的代码,设置url与Headers,先写一个爬取下来数据保存到json文件的方法
这里可能会遇到一些问题,列表里单引号和双引号要搞清楚
运行结果:接下来是一个自动爬取明星图片的方法(通过读取json文件中保存的’link’数据,即明星的百度百科链接,来进行图片的自动下载保存)
运行结果:
接着根据爬取的数据做了几个图表:
**
## 运行结果:
**
比较好奇哪个明星出场次数最多,就又写了个,可惜后来才发现table里本来就爬下来了。。林更新5次
数据可视化:
运行结果:
代码可能截图不全,参考为主,哪里不全可以找我发 -
python爬虫:爬取新浪新闻数据
2021-01-20 03:10:20打开某个网页,按F12—Network— 任意点一个网址可以看到:Headers—Request Headers中的关键词User-Agent用来识别是爬虫还是浏览器。 import urllib.request\nurl='http://weibo.com/tfwangyuan?is_hot=1' headers=... -
Python实现爬取网页中动态加载的数据
2020-12-17 02:18:33在使用python爬虫技术采集数据信息时,经常会遇到在返回的网页信息中,无法抓取动态加载的可用数据。例如,获取某网页中,商品价格时就会出现此类现象。如下图所示。本文将实现爬取网页中类似的动态加载的数据。 1... -
python爬虫爬取网页内容
2021-10-17 22:07:582.将需要爬取网页的网址复制粘贴。 3.从网络上获取网页内容(爬取过程中加上头信息), 假如有反爬虫机制,则需要用header进行伪装 (如何寻找header:1.网页、右键、查看源代码 2.网页、右键、network、名称、... -
python爬取微博网页数据
2019-01-21 14:08:51提供代码框架,读者们稍作修改就可以用了,本文爬取的是某舆情热门事件的发文ID、点赞数、转发数、评论量 -
Python爬虫爬取数据到sqlite数据库实例
2021-03-30 10:26:20萌新:使用xpath和正则表达式解析网页内容 代码如下: import sqlite3 import re import requests from lxml import html findlink = re.compile(r'<a href="(.*?)"') # 创建正则表达式对象,表示规则(字符串的... -
python简单爬虫抓取网页内容实例
2018-06-08 15:50:36一个简单的python示例,实现抓取 嗅事百科 首页内容 ,大家可以自行运行测试 -
python3 爬取网页表格实例
2018-07-01 16:18:18python爬取网页的表格内容, 并存入csv文件, 网页地址:http://app.finance.ifeng.com/data/stock/yjyg.php?symbol=000001 -
Python爬虫爬取数据
2021-10-16 20:08:00我是Python小白,我会用比较通俗易懂的方法告诉你如何去爬取数据。 一开始,我们需要pycharm(也就是我们编代码的工具),其次我们需要打开我们需要爬取数据的网页,我以京东鞋子为例。 那么,接下来就开始吧 ... -
Python爬虫学习-简单爬取网页数据
2021-08-11 19:58:28这是一篇介绍如何用Python实现简单爬取网页数据并导入MySQL中的数据库的文章。主要用到BeautifulSoup requests 和 pymysql。 以网页https://jbk.39.net/mxyy/jbzs/为例,假设我们要爬取的部分数据如下图所示... -
学习 Python 爬虫,手把手通过 Python 入门爬取网页信息
2022-05-06 19:30:28网络编程背景下的爬虫强调自动化,通过 Python 编程实现自动爬取资源,从而减少人力资源与精力消耗,提高效率。这篇文章将通过虚构的求职网站 Fake Python 以及使用 Lightly 展示完整的项目代码,动手在浏览器中编写... -
python爬虫爬取百度云盘资源
2015-12-28 20:19:31python爬虫爬取百度云盘资源,输入关键字直接在主奥面生成网址 -
python爬虫爬取天天基金
2020-10-15 16:03:01使用selenium加载网页,回去网页源代码,爬取天天基金网站基金排行,并存储在MongoDB和txt几十本中。 -
Python爬虫爬取动态网页
2018-05-01 20:05:54Python modules:requests、random、jsonBackground:对于静态网页,我们只需要把网页地址栏中的url传到get请求中就可以轻松地获取到网页的数据。但是,我们经常会遇到直接把网页地址栏中的url传到get请求中无法直接获... -
python爬虫爬取天气数据并图形化显示
2019-10-02 19:02:07使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该城市未来一周... -
Python 爬虫爬取多页数据
2020-11-21 00:50:38但是,按照常规的爬取方法是不可行的,因为数据是分页的:最关键的是,不管是第几页,浏览器地址栏都是不变的,所以每次爬虫只能爬取第一页数据。为了获取新数据的信息,点击F12,查看页面源代码,可以发现数据是...