python爬虫实践篇--------飞猪网站资料爬取

一、什么是网页的http请求?

Get请求:地址栏上明文显示了请求信息,即请求地址中带有符号 ? 的地址。请求速度快,但不安全

例如:
在这里插入图片描述
请求参数 wd 表示查询字段pn表示页数,即pn=0 -->第一页 pn = 10 -->第二页

POST请求:请求地址中不带POST表单数据,加密传输,常用于账号登录,很安全,但和前者相比速度慢。

例如:

在这里插入图片描述

二、什么是http请求头

告诉请求地址服务器,客户端的配置情况

在这里插入图片描述

练习:爬取百度搜索结果的前十页信息

python 代码

def baidu(wd="Curious chen"):
    #
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
    }
    # 正则1:找到每一页的所有链接
    data_match = r"data-tools=[\'\"]{1}({(.*?)})[\'\"]"
    # 正则2:将链接中的标题和url提取出来
    s_match = r".*title.*?:[\'\"](.*?)[\'\"].*?url.*?:[\'\"](.{4,})[\'\"]\}"
    # 读取百度搜索结果的前十页
    for i in range(10):
        pn = i * 10
        response = requests.get("https://www.baidu.com/s?wd=" + wd + "&pn=" + str(pn), headers=headers)
        datas = re.findall(data_match, response.text)
        print("第" + str(i+1) + "页")
        for s_json in datas:
            # 正则3  将&quot换成{“}
            s_json = re.sub(r'"', '"', s_json[0])
            s_json = re.match(s_match, s_json)
            print("     title:" + s_json.group(1), "url:", s_json.group(2))


if __name__ == "__main__":
    query = "飞猪"
    baidu(query)

运行结果:

在这里插入图片描述

三、静态网页和动态网页

静态网页:网页中的所有数据,都在源代码中,请求一次链接均可得到。

动态网页:部分数据须经js渲染,动态添加到网页中,一次请求得到的源代码中的动态数据会错误或是不存在。

实战:飞猪旅游网站一旅游点的所有动态数据

此旅游点的部分动态数据如下:

在这里插入图片描述
在这里插入图片描述

判断是动态数据的条件:源网页中数据不存在,或错误。

第一步:右键 -->查看源代码(或使用快捷键 Ctrl + U),打开源代码页。
在这里插入图片描述

第二步:使用快捷键 Ctrl + F 打开搜索栏
在这里插入图片描述
第三步:输入上述图片所述的动态数据,
在这里插入图片描述

如何请求,或者说找到这些动态数据

第一步:右键 --> 检查 (或快捷键 F12)打开浏览器后台工作栏
第二步:选择功能栏上的Network,然后选择ALL所有数据类型
第三步,Ctrl + F 打开全局搜索栏
第四步:刷新页面
在这里插入图片描述

比较重要的两个功能键
在这里插入图片描述
第五步:搜索
在这里插入图片描述
第六步:查看请求头,分析请求头需要加上哪些参数,GET的请求参数怎么获得
在这里插入图片描述
经分析:获得每一个景点的动态数据只需要改变GET请求 id 参数即可

    headers = {
        "Referer": referer,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
                      " Chrome/74.0.3729.169 Safari/537.36"
    }

    response = requests.get(
        "https://traveldetail.fliggy.com/async/queryItemDetailAjaxInfo.do?id="+str(id)+"&categoryType=7",
        headers=headers)

请求头加上referer,user-agent参数即可

第七步:分析json数据,提取需要的动态数据

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值