第三次作业-MOOC学习笔记:Python网络爬虫与信息提取
1.注册中国大学MOOC
2.选择北京理工大学嵩天老师的《Python网络爬虫与信息提取》MOOC课程
3.学习完成第0周至第4周的课程内容,并完成各周作业
第一周
Requests库的爬取性能分析
- import requests
- import time
- def getHTMLText(url):
- try:
- r = requests.get(url,timeout=30)
- r.raise_for_status()
- r.encoding = r.apparent_encoding
- return r.text
- except:
- return "产生异常"
- start = time.perf_counter()
- for i in range(100):
- getHTMLText("https://www.baidu.com")
- end = time.perf_counter()
- print("抓取100次百度首页内容所用时间:{:.2f}秒".format(end-start))
第二周
中国大学排名定向爬虫
- import requests
- from bs4 import BeautifulSoup
- import bs4
- def getHTMLText(url):
- try:
- r = requests.get(url, timeout=30)
- r.raise_for_status()
- r.encoding = r.apparent_encoding
- return r.text
- except:
- return ""
- def fillUnivList(ulist, html):
- soup = BeautifulSoup(html, "html.parser")
- for tr in soup.find('tbody').children:
- if isinstance(tr, bs4.element.Tag):
- tds = tr('td')
- ulist.append([tds[0].string, tds[1].string, tds[3].string])
- def printUnivList(ulist, num):
- tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
- print(tplt.format("排名","学校名称","总分",chr(12288)))
- for i in range(num):
- u=ulist[i]
- print(tplt.format(u[0],u[1],u[2],chr(12288)))
- def main():
- uinfo = []
- url = 'https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
- html = getHTMLText(url)
- fillUnivList(uinfo, html)
- printUnivList(uinfo, 20) # 20 univs
- main()
第三周
淘宝商品比价定向爬虫
- import requests
- import re
- def getHTMLText(url):
- try:
- r = requests.get(url, timeout=30)
- r.raise_for_status()
- r.encoding = r.apparent_encoding
- return r.text
- except:
- return ""
- def parsePage(ilt, html):
- try:
- plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
- tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)
- for i in range(len(plt)):
- price = eval(plt[i].split(':')[1])
- title = eval(tlt[i].split(':')[1])
- ilt.append([price , title])
- except:
- print("")
- def printGoodsList(ilt):
- tplt = "{:4}\t{:8}\t{:16}"
- print(tplt.format("序号", "价格", "商品名称"))
- count = 0
- for g in ilt:
- count = count + 1
- print(tplt.format(count, g[0], g[1]))
- def main():
- goods = '书包'
- depth = 3
- start_url = 'https://s.taobao.com/search?q=' + goods
- infoList = []
- for i in range(depth):
- try:
- url = start_url + '&s=' + str(44*i)
- html = getHTMLText(url)
- parsePage(infoList, html)
- except:
- continue
- printGoodsList(infoList)
- main()
股票数据定向爬虫
- import requests
- from bs4 import BeautifulSoup
- import traceback
- import re
- def getHTMLText(url, code="utf-8"):
- try:
- r = requests.get(url)
- r.raise_for_status()
- r.encoding = code
- return r.text
- except:
- return ""
- def getStockList(lst, stockURL):
- html = getHTMLText(stockURL, "GB2312")
- soup = BeautifulSoup(html, 'html.parser')
- a = soup.find_all('a')
- for i in a:
- try:
- href = i.attrs['href']
- lst.append(re.findall(r"[s][hz]\d{6}", href)[0])
- except:
- continue
- def getStockInfo(lst, stockURL, fpath):
- count = 0
- for stock in lst:
- url = stockURL + stock + ".html"
- html = getHTMLText(url)
- try:
- if html=="":
- continue
- infoDict = {}
- soup = BeautifulSoup(html, 'html.parser')
- stockInfo = soup.find('div',attrs={'class':'stock-bets'})
- name = stockInfo.find_all(attrs={'class':'bets-name'})[0]
- infoDict.update({'股票名称': name.text.split()[0]})
- keyList = stockInfo.find_all('dt')
- valueList = stockInfo.find_all('dd')
- for i in range(len(keyList)):
- key = keyList[i].text
- val = valueList[i].text
- infoDict[key] = val
- with open(fpath, 'a', encoding='utf-8') as f:
- f.write( str(infoDict) + '\n' )
- count = count + 1
- print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="")
- except:
- count = count + 1
- print("\r当前进度: {:.2f}%".format(count*100/len(lst)),end="")
- continue
- def main():
- stock_list_url = 'https://quote.eastmoney.com/stocklist.html'
- stock_info_url = 'https://gupiao.baidu.com/stock/'
- output_file = 'D:/BaiduStockInfo.txt'
- slist=[]
- getStockList(slist, stock_list_url)
- getStockInfo(slist, stock_info_url, output_file)
- main()
第四周
股票数据Scrapy爬虫
- import scrapy
- import re
- class StocksSpider(scrapy.Spider):
- name = "stocks"
- start_urls = ['https://quote.eastmoney.com/stocklist.html']
- def parse(self, response):
- for href in response.css('a::attr(href)').extract():
- try:
- stock = re.findall(r"[s][hz]\d{6}", href)[0]
- url = 'https://gupiao.baidu.com/stock/' + stock + '.html'
- yield scrapy.Request(url, callback=self.parse_stock)
- except:
- continue
- def parse_stock(self, response):
- infoDict = {}
- stockInfo = response.css('.stock-bets')
- name = stockInfo.css('.bets-name').extract()[0]
- keyList = stockInfo.css('dt').extract()
- valueList = stockInfo.css('dd').extract()
- for i in range(len(keyList)):
- key = re.findall(r'>.*</dt>', keyList[i])[0][1:-5]
- try:
- val = re.findall(r'\d+\.?.*</dd>', valueList[i])[0][0:-5]
- except:
- val = '--'
- infoDict[key]=val
- infoDict.update(
- {'股票名称': re.findall('\s.*\(',name)[0].split()[0] + \
- re.findall('\>.*\<', name)[0][1:-1]})
- yield infoDict
4.提供图片或网站显示的学习进度,证明学习的过程。
5.写一篇不少于1000字的学习笔记,谈一下学习的体会和收获。
经过这段时间的学习,我对爬虫有了一定的了解,爬虫就是一个程序,这个程序的目的就是为了抓取万维网信息资源,比如你日常百度、谷歌等搜索引擎,搜索结果就全都依赖来定时获取。通过学习我知道了Python 爬虫架构主要由五个部分组成,分别是调度器、URL管理器、网页下载器、网页解析器、应用程序。学习网络爬虫主要分成抓取,分析,存储三大板块。抓取即当我们在浏览器中输入一个url后回车,会发生以下步骤:一为查找域名对应的IP地址。二为向IP对应的服务器发送请求。三为服务器响应请求,发回网页内容。四是浏览器解析网页内容。网络爬虫要做的,简单来说,就是实现浏览器的功能。通过指定url,直接返回给用户所需要的数据,而不需要一步步人工去操纵浏览器获取。分析就是抓取之后就是对抓取的内容进行分析,你需要什么内容,就从中提炼出相关的内容来。常见的分析工具有正则表达式,BeautifulSoup,lxml等等。分析出我们需要的内容之后,接下来就是存储了。我们可以选择存入文本文件,也可以选择存入。这次课程我还学习了Python第三方库Requests,讲解通过HTTP/HTTPS协议自动从互联网获取数据并向其提交请求的方法;Python第三方库Beautiful Soup,讲解从所爬取HTML页面中解析完整Web信息的方法;Python标准库Re,讲解从所爬取HTML页面中提取关键信息的方法;Python第三方库Scrapy,介绍通过网络爬虫框架构造专业网络爬虫的基本方法。Requests库与HTTP协议的方法,功能是一一对应的,包括以下7个方法:requests.request() 构造一个请求,支撑以下各方法的基础方法 requests.get() 获取HTML网页的主要方法,对应HTTP协议的GET requests.head() 获取HTML网页头信息的方法,对应HTTP协议的HEAD requests.post() 向HTML网页提交POST请求的方法,对应HTTP协议的POST requests.put() 向HTML网页提交PUT请求的方法,对应HTTP协议的PUT requests.patch 向HTML网页提交局部修改,对应HTTP协议的PATCH requests.delete() 向HTML网页提交删除请求的方法,对应HTTP协议的DELETE。在这7种方式中,我们除了直接使用request()方法之外,还可以使用requests库的对应方法。比如说,requests.get()、requests.head()、requests.post()来实现。Urequest()还有13个访问控制的参数分别是params,data,json,headers,cookies 和 auth,files,timeout,proxies,allow_redirects 和 stream,verify 和 cert。crapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。我们需要知道的是,scrapy是一种集成框架,类似于request和xpath这些方法在scrapy都有集成。scrapy中,不同模块负责不同的任务分工。首先Scheduler发出请求(Requests),Downloader负责从互联网上下载内容,将下载好的内容(Responses)交给Spiders进行解析,解析完成后将内容Item返回,当然其中可能会涉及到对于解析后数据的进一步处理,这个任务是在Pipeline中完成的。它通常有两种使用方式,分别为直接在python脚本里定义一个爬取数据的类和创建完整的scrapy项目。这次学习使我受益匪浅,使我对python网络爬虫有了一定的了解。
第三次作业-MOOC学习笔记:Python网络爬虫与信息提取的更多相关文章
- 第3次作业-MOOC学习笔记:Python网络爬虫与信息提取
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进 ...
- 第三次作业-Python网络爬虫与信息提取
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 过程. 5.写一篇不少于100 ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- Python网络爬虫与信息提取
1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...
- Python网络爬虫与信息提取笔记
直接复制粘贴笔记发现有问题 文档下载地址//download.csdn.net/download/hide_on_rush/12266493 掌握定向网络数据爬取和网页解析的基本能力常用的 Pytho ...
- 【学习笔记】PYTHON网络爬虫与信息提取(北理工 嵩天)
学习目的:掌握定向网络数据爬取和网页解析的基本能力the Website is the API- 1 python ide 文本ide:IDLE,Sublime Text集成ide:Pychar ...
- Python网络爬虫与信息提取(一)
学习 北京理工大学 嵩天 课程笔记 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解 ...
- Python网络爬虫与信息提取[request库的应用](单元一)
---恢复内容开始--- 注:学习中国大学mooc 嵩天课程 的学习笔记 request的七个主要方法 request.request() 构造一个请求用以支撑其他基本方法 request.get(u ...
随机推荐
- 用 Python 把微信小程序的二维码转化成图片
官方文档 import cString import requests from tornado.web import authenticated, RequestHandler URL = 'htt ...
- 第五章 模块之 logging、copy、re
5.12 logging 日志模块 报警等级 CRITICAL = 50 # 最高FATAL = CRITICALERROR = 40WARNING = 30WARN = WARNINGINFO = ...
- matplotlib笔记3
关于matplotlib的绘制图形的基本代码,我们可以参照下面的连接 https://matplotlib.org/gallery/index.html https://matplotlib.org/ ...
- python检测当前网卡流量信息,用于查看实时网速
可以用来检测是否有挖矿程序在运行的一个子条件 # coding:utf-8 __author__ = 'chenhuachao' import wmi import time import platf ...
- Git和Github的介绍、简单操作、冲突(上)
目的: 1.git与github简介 2.Git与SVN区别 3.Github 的简单使用 4.下载安装Git-20-64-bit.exe 5.Git常用命令 5.1Git命令使用场景 5. ...
- Ubuntu Server Swap 分区设置
方案一:仅在内存耗尽的情况下才使用 swap 分区 # 首先进入 sudo 模式 sysctl vm.swappiness=0 # 临时生效 echo "vm.swappiness = 0& ...
- csredis
源码地址:https://github.com/2881099/csredis 1.增加了 CSRedisClient 现实集群与连接池管理,和 RedisHelper 静态类快速上手 //普通模式 ...
- 使用Docker发布Asp.Net Core程序到Linux
CentOS安装Docker 按照docker官方文档来,如果有之前安装过旧版,先卸载旧版,没有的话,可跳过. sudo yum remove docker \ docker-client \ doc ...
- 读取普通java web项目下的WEB-INF目录下的配置文件(application.xml,xx.properties等配置文件)
一.在Java web工程WEB-INF下创建weixin.properties属性文件 weixin.properties属性文件里内容如下: 二.创建PropertiesUtils.java测试类 ...
- Oracle 定时JOB
讲一下Oracle创建临时job小窍门,创建Oracle临时JOB是为了临时执行调用过程或者函数,只调用一次. 1.创建Oracle临时job declare VJOB number; begin ...