Http—Chrome—与Python爬虫

通过一个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( )
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值