Python3网络爬虫--爬取百度搜索结果(附源码)

2023-10-28


今天更新一篇基础,使用Python爬取百度搜索结果,最后将爬取结果保存到txt文本文件中。

一.准备工作

1.工具

1.Google Chrom浏览器
2.Xpath Helper
3.Pycharm 开发工具
4.Python3.x

二.思路

1.爬虫思路

在这里插入图片描述

2.数据抽取思路

  1. 确定目标
    在搜索框输入关键字,蓝色框的文字以及对应链接是我们爬取的目标在这里插入图片描述
  2. 开发者工具定位元素属性
    F12打开开发者工具,发现所有目标元素都在id=“content_left”标签里面,单个搜索结果在class=“result c-container new-pmd”中,搜索结果的标题和链接都在./h3/a中,分析清楚后,去写xpath就行了。
    在这里插入图片描述
  3. 翻页页码规律1
    由于我们是将所有搜索结果全部爬取,所以一定要翻页的
    通过观察能发现,我们每点一次下一页> url中的pn参数会 +10比如第二页:
    在这里插入图片描述
    第二页pn=10 第三页 pn=20 第四页 pn=30,那么第N页,pn=(N-1)*10。
  4. 翻页规律2
    分析了页码规律,还不算完,还要确定是否有下一页> ,我们可以手动翻页,或者手动修改"pn"参数,到最大页码,这里发现,当我们翻到76页(pn=75)时下一页> 按钮,消失了。
    在这里插入图片描述
  5. 确定翻页标志
    这样就好弄了,直接判断页面上有没有下一页>这个元素即可:
    在这里插入图片描述
    这里我们发现这个元素在id="page"的div下的div下的最后一个a标签的文本中,xpath可以这样写:

//div[@id=“page”]/div/a[last()]/text()

三.源代码

crawl_baidu_search_result.py

#-*-coding:utf-8-*-
import requests
from lxml import etree
import time
class BaiDu_Spider(object):
    def __init__(self,keyword):
        self.base_url='https://www.baidu.com/s?wd={}'
        self.keyword=keyword
        self.url=self.base_url.format(self.keyword)+'&pn={}&ie=utf-8'


    def get_html(self,page):
        headers={
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
        }
        try:
            r=requests.get(self.url.format(page),headers=headers)
            r.encoding='utf-8'
            res=etree.HTML(r.text)
            selector=res.xpath('//div[@id="content_left"]/div[@class="result c-container new-pmd"]')
            data_list=[]
            for data in selector:
                item={}
                item['title']=''.join(data.xpath('./h3/a/text()'))
                item['link']=''.join(data.xpath('./h3/a/@href'))
                data_list.append(item)
            flag=res.xpath('//div[@id="page"]/div/a[last()]/text()')
            print(flag)
            if flag:
                return data_list,True
            else:
                return data_list,False
        except:
            pass

    def save_data(self,item):
        with open(crawl_result,'a',encoding='utf-8')as f:
            data=item['title']+'\t'+item['link']
            print(data)
            f.write(data+'\n')
def main():
    n=10
    while True:
        data_list,flag=spider.get_html(n)
        for data in data_list:
            spider.save_data(data)
        time.sleep(1)
        if flag is True:
            n+=10
        else:
            print(f'程序已经退出,在{int(n/10)+1}页......')
            break


if __name__ == '__main__':
    keyWord='Python'
    crawl_result=f'./crawl_{keyWord}.txt'
    spider=BaiDu_Spider(keyWord)
    main()

四.结果

请添加图片描述

五.总结

本次内容比较基础,是对静态网页进行数据提取,主要依赖xpath。百度存在访问频率限制的反爬,所以加入了一秒的延时。

xpath的定位方法可以参考

xpath定位中详解id 、starts-with、contains、text()和last() 的用法

欢迎大家提出自己的看法,思路、代码方面有什么不足欢迎各位大佬指正、批评!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3网络爬虫--爬取百度搜索结果(附源码) 的相关文章

随机推荐

  • 编程实现RSA数字签名

    一 实验目的 理解RSA数字签名 并运用编程实现RSA数字签名 二 实验过程 1 学习RSA算法及RSA数字签名算法流程 2 RSA数字签名原理 当发送方想要给接收方发送数据 并想进行数字签名的时候 发送方只需要利用自己的私钥 对数据进行数
  • python进阶:线程、进程和协程

    前言 线程 进程和协程都是实现多任务 同一时间可以做多个事情就叫做多任务 的方法 并发 一段时间内做不同的事情 比如一个人吃饭喝水 吃的时候不能喝 喝的时候不能吃 只有在一段时间 吃了再喝或者喝了在吃 并行 同一时间做不同的事情 比如边听音
  • 谈乱序执行和内存屏障

    10多年前的程序员对处理器乱序执行和内存屏障应该是很熟悉的 但随着计算机技术突飞猛进的发展 我们离底层原理越来越远 这并不是一件坏事 但在有些情况下了解一些底层原理有助于我们更好的工作 比如现代高级语言多提供了多线程并发技术 如果不深入下来
  • [Linux]Kali安装Deepin-wine-WeChat

    Kali版本 2022 2 KDE环境 实体机 wget O https deepin wine i m dev setup sh sh apt get install com qq weixin deepin 其他的QQ TIM登录后会崩
  • python PyAV库解析H264视频流及保存指定帧

    PyAV是一个视频处理库 可用于读取 写入和处理视频 要使用PyAV读取视频关键帧 首先需要安装PyAV 可以使用以下命令安装PyAV pip install av 安装完成后 您可以使用以下代码打开视频文件并读取关键帧 import av
  • python数据可视化第八章使用matplotlib绘制高级图表

    使用matplotlib绘制高级图表 1 绘制高等图 等高线图是地形图上高程相等的相邻各点所连成的j闭合曲线 它会将地面上海拔高度相同的点连成环线 之后将环线垂直投影到某一水平面上 并按照 定的比例缩绘到图纸上 常见于山谷 山峰或梯度下降算
  • CloudOS:物联网开发平台,云上开发,边端交付

    什么是物联网 物联网 Internet of Things 简称IoT 是指通过各种信息传感器 射频识别技术 全球定位系统 红外感应器 激光扫描器等各种装置与技术 实时采集任何需要监控 连接 互动的物体或过程 采集其声 光 热 电 力学 化
  • iOS开发中,使用PC查看/修改沙盒文件

    简介 在进行iOS开发中 APP尤其是游戏 在沙盒中可以存放游戏资源包或者数据 例如Json文件 AssetBundle包 在使用服务器下载资源包 存放到本地沙盒中 可以大大减少APP本身的大小 当然 在调试的时候 如果频繁的更换服务器的A
  • 处理告警“ warning #69-D integer conversion resulted in truncation”的方法

    今天分享一个常见的语法告警 就是实参与形参的类型参数对于不上 错误之处 首先我们先看一下告警提示 告警 c 49 warning 69 D integer conversion resulted in truncation 其翻译过来意思就
  • 二 动态SQL和多对一,一对多

    二 动态SQL和多对一 一对多 10 多对一处理 测试环境搭建 按照查询嵌套处理 子查询 按照结果嵌套处理 联表查询 11 一对多 按照结果嵌套处理 按照查询嵌套处理 小结 12 动态 SQL IF choose when otherwis
  • xpath下载安装——Python爬虫xpath插件下载安装(2023.8亲测可用!!)

    目录 1 免费下载插件链接 若失效评论区留言发送最新链接 2023 7亲测可用 2 安装插件 1 打开chrome浏览器页面 点击 右上角三个点 gt 扩展程序 gt 管理拓展程序 若没找到点更多工具 2 打开右上角开发者模式 3 将刚刚下
  • 关于maven创建java-web工程加载过慢如何解决问题

    如何解决maven创建java web工程加载过慢如何解决问题 在创建项目时在这个界面中 添加设置一组变量archetypeCatalog internal 然后点击完成继续创建就可以了 但是这样做每次创建项目都要重复添加 很麻烦 如果大家
  • Spring实现封装自定义注解@Trimmed清除字符串前后的空格

    在Spring中实现字符串清除的方法有很多 原生方法String自带trim 方法 或者使用StringUtils提供的trim 方法 通常可以将上面的方式封装成自定义注解的形式去实现来节省更多的业务代码 Trimmed java impo
  • Foggy_driving数据集下载以及将其转换成VOC数据格式

    Foggy driving数据集官方下载地址 百度网盘下载链接 https pan baidu com s 1q4dhnlX doxlt13Mi uFZQ 提取码 2ap3 VOC格式的Foggy driving数据集百度网盘下载链接 ht
  • html基础题目

    1 在html中 样式表按照应用方式可以分为三种类型 其中不包括 d A 内嵌样式表 B 行内样式表 C 外部样式表文件 D 类样式表 2 在HTML中 可以使用 d 标记向网页中插入GIF动画文件 A
  • 从零开始实现自己的Kalimba——Cocos Creator新手教程系列(一)使用瓦片图Tiledmap设计游戏地图

    瓦片图Tiledmap可能是很多2d游戏开发者的偏爱 本节就Cocos Creator如何使用瓦片图进行详细的讲解 Tiled地图编辑器的下载安装不再赘述 下面介绍如何使用地图编辑器 创建新地图 地图方向选正常 其中45度和等角 交错 适合
  • uview2.0封装http请求实战以及常见请求传参实录

    1 前言 2 使用步骤 2 1 配置请求拦截器以及api集中管理配置 2 2 main js中进行引入请求拦截器 2 3 页面中引入请求方法并使用 1 前言 uview2 0是uniapp开发中使用频率相对来讲比较高的一款框架 今天从实战角
  • python爬虫十二:初步使用Scrapy框架爬取数据

    1 通过pipelines操作拿到的数据 要点一 爬虫文件必须通过关键字yield生成器才能与pipelines建立链接才可以操作 当运行爬虫文件之后执行的顺序如下图简介 如果重写模块或者内部方法可能会造成麻烦 往下翻阅可以看到open s
  • UC测试实习生笔试面试

    笔试 2014年5月14号 中大公教C402 一个半钟 好紧的时间 除了选择题和编程题 其他都感觉不好啊 一 选择题 1 chmod 755 filename 之后 文件权限为 A rwxr xr x 2 403状态表示 3 用于转义的字符
  • Python3网络爬虫--爬取百度搜索结果(附源码)

    文章目录 一 准备工作 1 工具 二 思路 1 爬虫思路 2 数据抽取思路 三 源代码 四 结果 五 总结 今天更新一篇基础 使用Python爬取百度搜索结果 最后将爬取结果保存到txt文本文件中 一 准备工作 1 工具 1 Google