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


今天更新一篇基础,使用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() 的用法

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

  • 13
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Python是一种非常流行的编程语言,可以用来爬取网页数据。为了爬取百度搜索结果,我们需要借助Python中的一些库。 首先,我们需要使用Requests库向百度发送HTTP请求。然后,我们可以使用BeautifulSoup库解析百度返回的网页内容,从而提取搜索结果。 以下是步骤: 1. 安装Requests和BeautifulSoup库。可以使用pip工具,打开终端并输入以下命令: ``` pip install requests pip install beautifulsoup4 ``` 2. 导入库。在Python脚本的顶部,导入需要使用的库。 ``` import requests from bs4 import BeautifulSoup ``` 3. 发送请求。向百度发送HTTP请求,获取搜索结果页面。 ``` url = "https://www.baidu.com/s?wd=" + keyword response = requests.get(url) ``` 这里的`keyword`为你想要搜索的关键字。 4. 解析网页内容。使用BeautifulSoup库解析百度搜索结果页面,提取出需要的搜索结果。 ``` soup = BeautifulSoup(response.content, 'html.parser') results = soup.find_all('div', class_='result') for result in results: title = result.find('h3').get_text() link = result.find('a')['href'] summary = result.find('div', class_='c-abstract').get_text() print(title, link, summary) ``` 这里的`soup.find_all('div', class_='result')`表示找到搜索结果的所有`div`元素,其中`class_='result'`表示这些`div`元素具有`result`类名,是搜索结果的容器。 接下来,我们使用`result.xxx`的方式获取每个搜索结果的标题、链接和简介,其中`get_text()`方法用于获取文本内容,`['href']`用于获取链接。最后,我们打印搜索结果。 这样就可以用Python爬取百度搜索结果了。当然,需要注意的是,爬取网页数据需要遵守网站的规则,避免过度请求导致IP被封禁。同时,按照法律法规,不要爬取有商业价值或个人隐私的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值