前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分享一个使用Python网络爬虫抓取百度关键词和链接的代码(bs4篇)

分享一个使用Python网络爬虫抓取百度关键词和链接的代码(bs4篇)

作者头像
前端皮皮
发布2022-08-17 17:18:06
1.4K0
发布2022-08-17 17:18:06
举报
文章被收录于专栏:前端进阶学习交流

大家好,我是皮皮。

一、前言

前几天在Python白银交流群有个叫【꯭】的粉丝分享了一份Python网络爬虫代码,用来获取某度关键词和链接的。当时他使用正则表达式的提取方式获取标题和链接,分享一个使用Python网络爬虫抓取百度关键词和链接的代码(正则表达式篇),今天这篇文章我们将使用bs4来进行实现。

二、实现过程

直接上代码了,如下所示:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Time    : 2022/4/20  18:24
# @Author  : 皮皮:Python共享之家
# @File    : demo.py

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd


# 从element里面进行分析,可以知道百度会给一个自己加密的Url
def convert_url(url):
    resp = requests.get(url=url,
                        headers=headers,
                        allow_redirects=False
                        )
    return resp.headers['Location']


#
# 获取url

def get_url(wd, num):
    s = requests.session()
    total_title = []
    total_url = []
    total_info = []
    # 第1页为小于10的数字 10为第2页,20为第三页,30为第四页,以此类推
    num = num * 10 - 10
    for i in range(-10, num, 10):
        url = 'https://www.baidu.com/s'  # 点击界面第二页可以看到网页变化截取关键部分 https://www.baidu.com/s?wd=python&pn=10
        params = {
            "wd": wd,
            "pn": i,
        }
        r = s.get(url=url, headers=headers, params=params)
        print("返回状态码:", r.status_code)  # 可以看对应Js 正常网页访问时候 status状态码 为200
        soup = BeautifulSoup(r.text, 'lxml')
        for so in soup.select('#content_left .t a'):
            # g_url = convert_url(so.get('href'))  # 对界面获取的url进行进行访问获取真实Url
            g_url = so.get('href')  # 对界面获取的url进行进行访问获取真实Url
            g_title = so.get_text().replace('\n', '').strip()  # 根据分析标题无对应标签 只能获取标签内文字 去掉换行和空格
            print(g_title, g_url)
            total_title += [g_title]
            total_url += [g_url]
        time.sleep(1 + (i / 10))
        print("当前页码:", (i + 10) / 10 + 1)
    try:
        total_info = zip(total_title, total_url)
        df = pd.DataFrame(data=total_info, columns=['标题', 'Url'])
        df.to_csv(r'./web_data.csv', index=False, encoding='utf_8_sig')
        print("保存成功")
    except:
        return 'FALSE'


if __name__ == '__main__':
    while True:  # 循环
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",
            "Host": "www.baidu.com",
        }
        wd = input("输入搜索内容:")
        num = int(input("输入页数:"))
        get_url(wd, num)

这个代码亲测好使,运行之后结果如下。

在本地也会自动地生成csv存储文件,内容如下:

三、总结

大家好,我是皮皮。这篇文章主要分享了一个使用Python网络爬虫抓取百度关键词和链接的代码。上一篇文章,使用了正则表达式来做提取,本文使用了bs4来进行实现提取的,行之有效。下一篇文章,将给大家分享使用xpath来提取百度关键词和链接,也欢迎大家积极尝试,一起学习。

最后感谢粉丝【꯭】分享,感谢【dcpeng】、【月神】在运行过程中给出的代码建议,感谢粉丝【冯诚】、【艾希·觉罗】等人参与学习交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python共享之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、实现过程
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档