python爬虫_第二课

Posted 一只特立独行的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫_第二课相关的知识,希望对你有一定的参考价值。

前提

下载并在环境中安装requests库,可以在命令行cmd下采用
pip install requests
进行安装。这个库用来模拟浏览器向服务器发送信息。

爬取搜狗浏览器的首页:

代码

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
#- 需求:爬取搜狗首页的页面数据
import requests
if __name__ == "__main__":
    #step_1:指定url
    url = 'https://www.sogou.com/'
    #step_2:发起请求
    #get方法会返回一个响应对象
    response = requests.get(url=url)
    #step_3:获取响应数据.text返回的是字符串形式的响应数据
    page_text = response.text
    print(page_text)
    #step_4:持久化存储
    with open('./sogou.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    print('爬取数据结束!!!')

结果展示

注意点:

只爬取html文件,丢弃css和js文件,因为我们只需要对字符进行分析,不关注网页布局,为了追求速度,js和css进行丢弃。

爬取搜狗词条对应的搜索结果页面(简易网页采集器)

URL分析:

在百度的首页输入ACM后,发现他的URL是https://www.baidu.com/s?wd=ACM
经过分析可知,对关键词的URL请求是:
https://www.baidu.com/s?wd=关键词
分析得到了URL的格式:
https://www.baidu.com/s? 键=值&键=值

代码

# -*- coding:utf-8 -*-

#UA:User-Agent(请求载体的身份标识)
#UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,
#说明该请求是一个正常的请求。但是,如果检测到请求的载体身份标识不是基于某一款浏览器的,则表示该请求
#为不正常的请求(爬虫),则服务器端就很有可能拒绝该次请求。

#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
import requests
if __name__ == "__main__":
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    url = 'https://www.baidu.com/s'
    #处理url携带的参数:封装到字典中
    kw = input('enter a word:')
    param = {
        'wd':ACM
    }
    #对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
    response = requests.get(url=url,params=param,headers=headers)

    page_text = response.text
    fileName = kw+'.html'
    with open(fileName,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print(fileName,'保存成功!!!')

结果展示:


爬取百度翻译

网页分析:



观察前后两个页面,发现在输入文本后网页出现了局部刷新。这是由于ajax实现的。按f12进行审查元素,看请求的格式。发现在请求体中发送了表单数据query:‘AC’,以及响应体的内容格式:json文件

代码:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import requests
import json
if __name__ == "__main__":
    #1.指定url,通过f12观察POST请求最先向哪里发送数据得到
    post_url = 'https://fanyi.baidu.com/sug'
    #2.进行UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'

    }
    #3.post请求参数处理(同get请求一致)
    word = input('enter a word:')
    data = {
        'kw':word
    }
    #4.请求发送
    response = requests.post(url=post_url,data=data,headers=headers)
    #5.获取响应数据:json()方法返回的是obj(如果确认响应数据是json类型的,才可以使用json())
    dic_obj = response.json()

    #持久化存储
    fileName = word+'.json'
    fp = open(fileName,'w',encoding='utf-8')
    json.dump(dic_obj,fp=fp,ensure_ascii=False)

    print('over!!!')



展示结果:

注意点:

第一个post向sug发送请求

爬取电影分类排行榜

网页分析

分析发现,每次导航条拖到底部,都会进行局部刷新,推测使用ajsx进行局部刷新,f12进行查看。

验证猜测,确实是通过ajsx进行页面局部刷新。

分析发现请求行的规律
https://movie.douban.com/j/chart/top_list?type=17&interval_id=100:90&action=&start=40&limit=20
猜测start是开始电影的意思,limit是每次发送数量的意思。验证猜测,猜测成立。

代码

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import requests
import json
if __name__ == "__main__":
    url = 'https://movie.douban.com/j/chart/top_list'
    param = {
        'type': '24',
        'interval_id': '100:90',
        'action':'',
        'start': '0',#从库中的第几部电影去取
        'limit': '20',#一次取出的个数
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'

    }
    #发送get请求
    response = requests.get(url=url,params=param,headers=headers)
	#得到相应的json文件
    list_data = response.json()

    fp = open('./douban.json','w',encoding='utf-8')
    json.dump(list_data,fp=fp,ensure_ascii=False)
    print('over!!!')

展示结果:


以上是关于python爬虫_第二课的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫第二课 网络编程基础

Python爬虫第二课 网络编程基础

scrapy学习第二课

爬虫第二课:解析网页中的元素

互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)

互联网金融爬虫怎么写-第二课 雪球网股票爬虫(正则表达式入门)