爬虫学习(1)

本文介绍了Python中用于网络请求的requests库,包括指定URL、发起请求、获取响应数据和保存数据。还讨论了动态参数、UA伪装以避免被识别为爬虫,以及通过AJAX请求抓取动态内容,如百度翻译的示例。最后提到了针对豆瓣电影页面的滚动加载请求分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1、基础知识

        -urllib模块

        -requests模块

作用:模拟浏览器发出请求。

如何使用:

        -指定url

        -发起请求

        -获取响应数据

        -持久化存储

环境安装:

pip install requests

使用案例

if __name__ == "__main__":
    1、指定url
    url = 'https://www.sogou.com/'
    2、发起请求
    response = requests.get(url=url)
    3、获取响应数据
    page_text = response.text
    4、持久化保存
    print(page_text)
    with open('./sogou.html', 'w', encoding='utf-8') as fp:
        fp.write(page_text)

    print('爬取数据结束!!!')

 2、实例1:网页采集器

对于url中的参数需要动态变化,以保证通用性,可以使用键值对存储。

if __name__ == "__main__":
    #这里先指定url的前缀
    url='https://www.baidu.com/s'
    #我们要进行搜索时,wd=东南大学,wd和东南大学可以作为键值对来方便更改存储
    my_keyword=input('enter a word:')
    param={
        'wd':my_keyword
    }
    #第一个参数是前缀,第二个参数是添加进url中的参数
    response=requests.get(url=url,params=param)

    response_txt=response.text
    print(response_txt)

3、UA伪装:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识是某一款浏览器,说明该请求是正常的请求,如果载体身份标识不是基于某一款浏览器,则表示该请求为不正常请求。需要将爬虫对应的请求载体身份标识伪装成某一款浏览器。

if __name__ == "__main__":
    #添加身份标识
    headers={
        'User-Agent':'Mozilla / 5.0(WindowsNT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 114.0.0.0Safari / 537.36 Edg / 114.0.1823.51'
    }
    url='https://www.baidu.com/s'
    my_keyword=input('enter a word:')
    param={
        'wd':my_keyword
    }
    #身份标识作为第三个参数,进行UA伪装,伪装成正常浏览器
    response=requests.get(url=url,params=param,headers=headers)
    response_txt=response.text
    print(response_txt)

4、实例2:破解百度翻译

有的时候一张网页可能存在许多个框,但是我们只想获得其中的一个框的信息。

 对于搜索框进行删除或者写入,会引起局部刷新,可以用ajax请求实现。所以说需要捕获阿贾克斯请求。可以按F12打开,查看网络

 下面all代表全部的数据包,XHR代表阿贾克斯数据包。

可以发现在翻译栏输入dog,可以获得三个阿贾克斯数据包

点开负载,发现每个数据包都有一个字母

 

对应的请求是post请求(携带了参数),响应数据是一组json数据。

import requests
import json
if __name__ == "__main__":
    #UA伪装
    headers={
        'User-Agent':'Mozilla / 5.0(WindowsNT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 114.0.0.0Safari / 537.36 Edg / 114.0.1823.51'
    }

    #url从标头中的’请求url‘中获得
    url='https://fanyi.baidu.com/sug'

    #参数构建,根据sug数据包的内容,参数字典对为kw:dog
    data={
        'kw':'dog'
    }
    #百度翻译的请求方法是post,第一个参数是url,第二个参数是请求携带的数据,是url中携带的参数
    response=requests.post(url=url,data=data,headers=headers)

    #json方法返回的是一个obj对象,如果确认响应类型是json类型的,才可以使用json(),可以从响应标头Content-Type获取
    dic_obj=response.json()


    #进行持久化存储
    fp=open('./dog.json','w',encoding='utf-8')
    json.dump(dic_obj,fp=fp,ensure_ascii=False)
    fp.close()

5、案例3:豆瓣电影

豆瓣电影推荐向下拖动点加载更多会更新界面,所以会使用阿贾克斯请求,请求URL在图中。 

 

 每次点击加载更多都会出现一个GET请求。

GET请求的参数:

 

可以修改参数并发出请求来获得所需要的响应。

和前面类似,将requests.post()改成requests.get()即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值