Http—Chrome—与Python爬虫
2017-10-02 12:29
225 查看
通过一个Url能得到什么?
举个栗子:https://www.baidu.com/s?wd=%E9%BB%84%E9%87%91%E5%91%A87.1%E4%BA%BF%E4%BA%BA%E6%BD%AE&rsv_idx=2&tn=baiduhome_pg&usm=3&ie=utf-8&rsv_cq=%E6%96%B0%E6%B5%AA%E5%BE%AE%E5%8D%9A&rsv_dl=0_right_toplist_20811
url包含:协议 + 域名(IP) + 路由 + 端口 + 参数
Url基本类型: GET POST
一个小技能:在终端Ping一个域名就能得到一个网站的IP
Chrome 大法好
在Chrome的右键选项单中,‘检查’这一项可以得到向这个网页绝大部分的内容。其中,爬虫中最常用的几个类型:XHR DOC WS
初试Python爬虫
Python 中爬取数据的model是Urllib2&Urllib
分析是json用的是json
筛选html用的是BeautifulSoup
下面以搜狐考试为例我们来试一下 GET 和 POST
# GET # url = 'http://kaoshi.edu.sina.com.cn/college/scorelist' # request = urllib2.Request(url=url) # response = urllib2.urlopen(request, timeout=20) # result = response.read() # print result # POST # url = 'http://shuju.wdzj.com/depth-data.html' # data = urllib.urlencode({'type1': 1, 'type2': 2, 'status': 0, 'wdzjPlatId': 59}) # request = urllib2.Request(url) # opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) # response = opener.open(request, data) # result = response.read() # # for key in json.loads(result).keys(): # print key
一道题:把豆瓣热门tag下20部电影的名字打印出来
#第一步:设置语言环境 # encoding: utf8 import sys reload(sys) sys.setdefaultencoding('utf-8') #第二步:加载需要的模块 from bs4 import BeautifulSoup import urllib2 import json #第三部:爬豆瓣的tag,基本参数设置 url = 'https://movie.douban.com/j/search_tags?type=movie&source=' request = urllib2.Request(url=url) response = urllib2.urlopen(request, timeout=20) #第四步:创建tag实例,把我们抓到的tag装进去 tags = result['tags'] #第五步:开始抓电影名字了,这里我们先把这个网页拿到手,然后把网页内有一个包含20个电影的url保存在我们的movies[item]内。 movies = [] for tag in tags: limit = 0 while 1: #我们为了抓取的可设置性,所以把两个最核心的参数设置成变量 url = ' https://movie.douban.com/j/search_subjects?type=movie&tag=' + tag + '&sort=recommend&page_limit=20&page_start='+ str(limit) request = urllib2.Request(url=url) response = urllib2.urlopen(request, timeout=20) result = json.loads(response.read()) #并且使这个变量自增,所以省去每次都要手改的功夫 result = result['subjects'] limit += 20 #设置当爬不到数据(到头了)就中断 if len(result) == 0: break 把爬到的数据放进movies实例中 for item in result: movies.append(item) ##### break #因为咱们这里只要20个。取消循环 ##### break #因为咱们这里只要20个。取消循环 #写个标题先 print '最近豆瓣最热的20部电影List' #第六步:遍历得到的item里面20部电影里面20部电影的网站,从中抓取电影名 ###xrange与range的区别 1、range()和xrange() 在Python 2里是两种不同的实现。但是在Python 3里,range()这种实现被移除了; 2、range返回的是一个包含所有元素的列表,xrange返回的是一个生成器,生成器是一个可迭代对象,在对生成器进行迭代时,元素是逐个被创建的。一般来看,在对大序列进行迭代的时候,因为xrange的特性,所以它会比较节约内存。 3、xrange 不可切片 ### for x in xrange(0,len(movies)): item = movies[x] #url item字典里有一个url属性,就是每个电影的内页面 request = urllib2.Request(url=item['url']) response = urllib2.urlopen(request, timeout=20) result = response.read() #用BeautifulSoup处理html html = BeautifulSoup(result,"html.parser") #从html中筛选h1的第一项 title = html.select('h1')[0] #从h1中筛选span的第一项 title = title.select('span')[0] #把获得的东西转换成文本 title = title.get_text() print title #第七步:把你抓取到的title 丢进movies里面 movies[x]['title'] = title #第八步:把手机到的结果输出到movies.txt fw = open ('movies.txt','w') for item in movies : tmp = '' for key,value in item.items(): tmp += str(value) + ',' fw.write(tmp[:-1],'\n') #每输出一个电影的相关参数就换一行,数据更整齐 fw.close( )
相关文章推荐
- Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?
- python爬虫webdriver.Chrome 数据可视化简单案例matplotlib
- 零基础写python爬虫之HTTP异常处理
- [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图
- 芝麻HTTP:Python爬虫实战之抓取爱问知识人问题并保存至数据库
- python+Selenium2+chrome构建动态网页爬虫工具
- 芝麻HTTP:Python爬虫实战之抓取淘宝MM照片
- 芝麻HTTP:Python爬虫入门之URLError异常处理
- Python爬虫入门2--请求(HTTP)
- Selenium+Chrome(PhantomJs) Python爬虫
- python爬虫3之http get请求模拟
- Python爬虫:HTTP协议、Requests库
- 第三百五十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—chrome谷歌浏览器无界面运行、scrapy-splash、splinter
- 芝麻HTTP: Python爬虫利器之PyQuery的用法
- python 爬虫 url error : HTTP 403 Forbidden
- 02—小白学Python爬虫之HTTP协议简介
- Python 爬虫教程 2 - HTTP协议
- python爬虫时http协议以及实现代码
- Python爬虫——web前端基础XPath、Json和HTTP
- python爬虫过程报错:http.client.RemoteDisconnected: Remote end closed connection without response