python爬虫-百度搜索结果爬取(一)

12
回复
140
查看
[复制链接]

微信扫一扫 分享朋友圈

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-4-9 18:48:04 | 显示全部楼层 |阅读模式
大家好,这次写个文章开始讲解爬虫的相关知识,主要包含,爬虫的简介,再就是带大家做一个简单的通用爬虫。
一、爬虫的简介

1.什么是爬虫

通过编程,模拟浏览器上网,然后让其去互联网上抓取数据的过程,我在一般都是用来爬取网上的数据玩,有时候也会用爬虫来下载图片。
2.爬虫中的矛与盾


  • 反爬机制:门户网站通过制定响应的策略或者技术手段,防止爬虫程序进行网站数据爬取
  • 反反爬机制:破解反爬机制
  • robots.txt协议:规定那些数据可以爬取,哪些不能爬取。
注意:数据不能乱爬吼,要遵循,robots.txt的协议哦[狗头]。
二、爬虫的分类


  • 通用爬虫:抓取互联网中的一整张页面数据
  • 聚焦爬虫:在通用爬虫的基础上,抓取页面中的特定的局部内容。
  • 增量爬虫:检测网站中数据更新情况,只会抓取网站中最新更新出来的数据
三、通用爬虫之爬取百度搜索的页面

主要用的模块为requests,主要的流程如下图所示,我们以爬取百度搜索结果的爬虫为例来解释爬虫的运作过程。


1.获取初始的URL:
首先搜索“秦国”可以在地址栏找到地址:地址较长,我们可以截取前半部分就行,也就是下面这个地址,可以看出搜索内容就是秦国后面的内容。
https://www.baidu.com/s?wd=秦国


搜索内容

通过param来存储搜索内容,在发起请求的时候,requests会自动进行拼接。
    # 定义url的地址
    url = r'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&'
    # 定义搜索内容
    kw = '秦国'
    param = {
        'wd': kw
    }2.获取请求头
User Agent中文名为用户代理,简称 UA,它使得服务器能够识别客户使用的操作系统及版本。可以通过在浏览器按住F12,然后点开网络,随便查询一个请求,找到消息头里的请求头,就可以获取用户代理了,这样就可以让爬虫伪装成浏览器进行访问。



如何获取用户代理

使用head请求头来伪装成浏览器,让服务器认为是浏览器,如下面代码所示:
# 伪装请求头
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'}3.发起请求
使用requests的get方法发起请求,如下图所示,url使用上面的url,参数使用上面定义的param,请求头则使用head。
# 发起请求
response = requests.get(url=url, params=param, headers=head)4.获取请求内容并解析
使用response.test来获取响应的内容,然后存储起来,完整的程序,如下图所示,这样就可以把“秦国”这个搜索页面下载下来。有一个名为“秦国.html”的文件,就证明你的程序运行成功了。
import requests

if __name__ == "__main__":
    # 定义url的地址
    url = r'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&'
    # 定义搜索内容
    kw = '秦国'
    param = {
        'wd': kw
    }
    # 伪装请求头
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'}
    # 发起请求
    response = requests.get(url=url, params=param, headers=head)
    # 获取请求结果
    result = response.text
    # 定义储存结果的文件名
    filename = kw+'.html'
    # 存储文件
    with open(filename, 'w', encoding='utf-8') as tem:
        tem.write(result)
    print(filename, '保存成功')
关于通用爬虫的内容就介绍到这里,如果你想了解更多的关于python的内容,可以参考我下面的这两篇回答,里面也有部分关于爬虫的内容哦:
回复

使用道具 举报

1

主题

4

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2023-4-9 18:48:40 | 显示全部楼层
大佬,请问一下,我爬出来是乱码为什么啊?
回复

使用道具 举报

2

主题

6

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-4-9 18:49:09 | 显示全部楼层
你在这个位置加一句print(response.encoding),看看网页的编码类型是啥,然后把后面文件的解码类型改成这个格式,就OK了
[图片]
回复

使用道具 举报

4

主题

12

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2023-4-9 18:49:16 | 显示全部楼层
爬不了几次就被封掉了
回复

使用道具 举报

2

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-4-9 18:50:11 | 显示全部楼层
其实按百度的robots协议,他家的东西一个都不能爬。。。
回复

使用道具 举报

2

主题

9

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-4-9 18:51:08 | 显示全部楼层
可以参考:https://www.zhihu.com/pin/1491768536188485632
回复

使用道具 举报

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-4-9 18:51:19 | 显示全部楼层
能不能爬出百度搜索页后的结果,然后模拟点击动作,再进一步下载里面的文章呢
回复

使用道具 举报

1

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-4-9 18:52:03 | 显示全部楼层
如何大量抓取关键词搜索结果叻?目前上线一个月更新二次请求参数了。还是被反爬了。一次参数更新起效14天左右。
回复

使用道具 举报

0

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2023-4-9 18:52:39 | 显示全部楼层
遇到同样问题,想问大佬,最后解决了吗?
回复

使用道具 举报

3

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-4-9 18:53:11 | 显示全部楼层
解决了。 动态UA、 动态Cookie、降低抓取频率、频次。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表