Python爬虫学习笔记(2)-单线程爬虫
来源:互联网 发布:淘宝上下架工具 编辑:程序博客网 时间:2024/05/17 23:23
Python爬虫学习笔记(2)-单线程爬虫
标签(空格分隔): python 爬虫 单线程
概要
- Requests介绍
- 网页爬虫
- 向网页提交数据
- 实战–极客学院课程爬虫
1.Requests介绍
- [x] Requests:HTTP for Humans(第三方库,实现python的网络连接)
- [x] 完美的替代Python的urllib2模块
- [x] 更多的自动化
- [x] 更友好的用户体验
- [x] 更完善的功能
1)urllib2模块
目标网址:’https://api.github.com’
import urllib2gh_url = 'http://api.github.com'req = urllib2.Request(gh_url)password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()password_manager.add_password(None, gh_url, 'user', 'pass')auth_manager = urllib2.AbstractBasicAuthHandler(password_manager)opener = urllib2.build_opener(auth_manager)urllib2.install_opener(opener)handler = urllib2.urlopen(req)print handler.getcode()print handler.headers.getheader('content-type')
2)使用requests模块
# -*- coding: utf-8 -*-import requestsr = requests.get('https://api.github.com', auth=('user', 'pass'))print r.status_codeprint r.headers['content-type']
2.第一个网页爬虫
- 用requests提取网页源代码
- 用正则表达式匹配内容
1)提取源代码
- 在一些情况下直接获取
- 修改http头获取源代码
a.直接获取
import requestshtml = requests.get('http://tieba.baidu.com/f?ie=utf-8&kw=python')print html.text
requests.get()获取网页源代码
.text输出内容
b.修改http头
有些情况下网站对访问进行检查,阻止爬虫requests的访问,所以需要更改http头,作用是让爬虫伪装成浏览器从让网站通过访问。
语法:
- 添加语句:(变量名) = {‘User-Agent’:”}
User-Agent的内容通过:右键
->审核元素
->NetWork
->刷新网页
->任意选择一项
->Headers
->在Request Headers中找到User-Agent
- 在requests.get()中添加
headers = 变量名
eg.
headers = {'User-Agent':'...'}html = requests.get('...', headers = headers)
2)提取内容
找到自己所需的内容的规律用正则表达式匹配。
3.向网页提交数据
- Get和Post介绍
- 分析目标网站
- Requests的表单提交
1)Get和Post介绍
- Get是从服务器上获取数据
- Post是从服务器传送数据,并返回所传送的值
- Get通过构造url中的参数来实现功能
- Post将数据放在header提交数据
2)分析目标网站
目标:https://www.crowdfunder.com/browse/deals
使用:Chrome-审核元素-Network
import requestsimport reurl = 'http://www.crowdfunder.com/browse/deals'html = requests.get(url).textprint html
发现在点击异步加载项后,提取不了新增内容
3)Requests表单提交
核心方法:requests.post
核心步骤:构造表单-提交表单-获取返回信息
对于使用异步加载技巧的网站,get只能获取部分信息,所以使用Post
import requestsimport reurl = 'http://www.crowdfunder.com/browse/deals&template=false'data = { 'entitles_only':'true', 'page':'1'}html_post = requests.post(url, data=data)title = re.findall('"card-title">(.*?)</div>', html_post.text, re.S)for each in title: print each
- page所对应的值为异步页数,初始页为1
3.实战–极客学院课程爬虫
- 目标网站:http://www.jikexueyuan.com/course/
- 目标内容:前20页的课程名称,课程介绍,课程时间,课程等级,学习人数
- 涉及知识:Requests获取网页,re.sub换页,正则表达式匹配内容
爬虫只能获取到我们能看到的东西
# -*- coding: utf-8 -*-import requests, re, sysreload(sys)sys.setdefaultencoding("utf-8")class spider(object): def __init__(self): print u'开始爬取内容。。。' def getsource(self, url): html = requests.get(url) return html.text def changepage(self, url, total_page): now_page = int(re.search('pageNum=(\d+)', url, re.S).group(1)) page_group = [] for i in range(now_page, total_page+1): link = re.sub('pageNum=\d+','pageNum=%s'%i, url, re.S) page_group.append(link) return page_group def geteveryclass(self, sourse): everyclass = re.findall('(<li deg="".*?</li>)', sourse, re.S) return everyclass def getinfo(self, eachclass): info = {} info['title'] = re.search('target="_blank">(.*?)</a>', eachclass, re.S).group(1) info['content'] = re.search('</h2><p>(.*?)</p>', eachclass, re.S).group(1) timeandlevel = re.findall('<em>(.*?)</em>', eachclass, re.S) info['classtime'] = timeandlevel[0] info['classlevel'] = timeandlevel[1] info['learnnum'] = re.search('learn-number">(.*?)</em>', eachclass, re.S).group(1) return info def saveinfo(self, classinfo): f = open('info.txt', 'a') for each in classinfo: f.writelines('title:' + each['title'] + '\n') f.writelines('content:' + each['content'] + '\n') f.writelines('classtime:' + each['classtime'] + '\n') f.writelines('classlevel:' + each['classlevel'] + '\n') f.writelines('learnnum:' + each['learnnum'] + '\n\n') f.close()if __name__ == '__main__': classinfo = [] url = 'http://www.jikexueyuan.com/course/?pageNum=1' jikespider = spider() all_links = jikespider.changepage(url,20) for link in all_links: print u'正在处理页面:' + link html = jikespider.getsource(link) everyclass = jikespider.geteveryclass(html) for each in everyclass: info = jikespider.getinfo(each) classinfo.append(info) jikespider.saveinfo(classinfo)
作者:Skyeyes
日期:2015.11.19
说明:本文根据极客学院Python定向爬虫入门整理总结
0 0
- Python爬虫学习笔记(2)-单线程爬虫
- Python爬虫入门学习--(单线程爬虫)
- python-单线程爬虫
- python学习中一个单线程爬虫
- Python爬虫学习(单线程爬虫(一))
- Python爬虫学习(单线程爬虫(二))
- Python爬虫之<单线程爬虫>
- Python爬虫(单线程爬虫(三))
- python单线程网络爬虫
- python单线程爬虫(一)
- Python爬虫学习笔记
- python爬虫学习笔记
- python爬虫学习笔记
- python爬虫学习笔记
- Python 爬虫学习笔记
- python爬虫学习笔记
- Python 爬虫学习笔记
- Python 网络爬虫单线程版
- Nginx学习---用不同域名访问同一台机器的不同项目
- VS 报cmath(19): error C2061: 语法错误: 标识符“acosf” 错误
- 读书笔记--推荐系统实践(2)
- 第2周项目2-就拿胖子说事
- linux添加系统调用总结(内核版本4.4.4)
- Python爬虫学习笔记(2)-单线程爬虫
- 【spark】采用LogisticRegression(ML API篇)对MNIST的0-1数字进行识别
- JavaScript 原型概念深入理解
- HDU5131(模拟)
- hdu5222(拓扑排序+并查集)
- Debian下iceweasel(FireFox)缓存目录下的视频文件
- Python爬虫学习笔记(3)-XPath与多线程爬虫
- bzoj 3625 小朋友和二叉树 多项式开根
- UI学习第09天