python爬虫小案例——汽车之家

这篇具有很好参考价值的文章主要介绍了python爬虫小案例——汽车之家。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章是使用bs4中的BeautifulSoup和requests解析网页和获取数据👑🌟


🌟前言

为了更深入的学习爬虫,今天来了解下bs4的使用和实践,当然解析网页不止只有bs4的BeautifulSoup可以做到,还有xpath语法和正则表达式。本期是初步的了解BeautifulSoup模块的使用,欢迎初学者学习本期内容。
python爬虫小案例——汽车之家,python,爬虫


一、🍉bs4中的BeautifulSoup

BeautifulSoup库是Python编程语言中的一款第三方库,主要用于解析HTML和XML文档。这个库能够将复杂的HTML或XML数据转换为树形结构(即DOM树),让开发者能够以更简单的方式来遍历、搜索和操作这些结构化的数据。

bs4的四种解析方式

解析器 使用方法 优势 劣势
python标准库 soup = BeautifulSoup(htmlt, ‘html.parser’) python内置标准库;执行速度适中 python2.x或者python3.2x前的版本中文文档容错能力差
lxml HTML解析器 soup = BeautifulSoup(html, ‘lxml’) 速度快;文档容错能力强 需要安装c语言库
lxml XML解析器 soup = BeautifulSoup(html, ‘xml’) 速度快;唯一支持XML的解析器 需要安装c语言库
html5lib soup = BeautifulSoup(html, ‘html5lib’) 最好的容错性;以浏览器的方式解析文档;生成HTML5格式的文档;不依赖外部扩展库 速度慢

二、🍉bs4的语法

  1. 获取全部的单个标签:
soup.find_all('标签')
  1. 获取拥有指定属性的标签:
soup.find_all('标签',属性的键值对)
soup.find_all('标签',attrs={键值对1,键值对2})

注意:attrs是存储的是字典,里面可以包含html的多个属性

  1. 获取多个指定属性的标签:
soup.find_all('标签',属性的键值对1,属性的键值对2)

如果在获取时,出现python关键字与属性冲突时,在获取的时候添加一个下划线 ' _ ' ,例如:

soup.find_all('div',class_='position')
  1. 获取标签属性值:

先锁定标签

alist=soup.find_all('a')
  • 方法1:
    通过下标方式提取
for a in alist:
    href=a['href']
    print(href)
  • 方法2:
    利用attrs参数提取
for a in alist:
	href=a.attrs['href']
	print(href)
  1. 获取标签内的文本信息:
    使用string方法
# 获取html的所有div标签,从第二个开始
divs=soup.find_all('div')[1:]
# 利用循环输出每个标签
for div in divs:
    # 只提取标签下的字符串
    a=div.find_all('a')[0].string
    
# 提取整个div下的字符串
divs=soup.find_all('div')[1:]
for div in divs:
    infos=list(div.stripped_strings)  # stripped_strings方法是删除列表中的制表符,例如: "\n,\t"等

三、🍉内容实践

爬取的网页链接:https://www.autohome.com.cn/news/1/#liststart

1. 确定想要爬取的内容

在此以爬取:前五页的(标题、更新时间和页面部分显示的详细内容)

2. 分析网页

首页内容,这里要注意的是这个网页链接,可以从第一页到第三页的链接对比

python爬虫小案例——汽车之家,python,爬虫

仔细查看后,只有这个/news/后的数字发生了变化,所以我们只要做一个循环数字的方式更改内容就可以

https://www.autohome.com.cn/news/1/#liststart
https://www.autohome.com.cn/news/2/#liststart
https://www.autohome.com.cn/news/3/#liststart

内容实施:

urls = []         # 定义一个列表存放每页的链接
for i in range(1, 6):
    url = f"https://www.autohome.com.cn/news/{i}/#liststart"
    urls.append(url)
# print(urls)

3. 获取数据分析

  1. 观察html标签内容

python爬虫小案例——汽车之家,python,爬虫

  1. 获取网页的标签信息,发现这些标签都在div标签中的ul标签里面

python爬虫小案例——汽车之家,python,爬虫

  1. 对比标签,发现每个内容都是使用的相同标签

python爬虫小案例——汽车之家,python,爬虫
python爬虫小案例——汽车之家,python,爬虫

  1. 代码
# 导包
from bs4 import BeautifulSoup
import requests

# 设置请求头
url = 'https://www.autohome.com.cn/news/'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"
}

# 利用循环读取前5分页
urls = []         # 定义一个列表存放每页的链接
for i in range(1, 6):
    url = f"https://www.autohome.com.cn/news/{i}/#liststart"
    urls.append(url)
# print(urls)

# 定义两个列表 news存放字典数据
news = []

for url in urls:
    # 利用try……except语句获取每页,如果某页读取不了,则继续读取下一页
    try:
        response = requests.get(url, headers=headers)
        content = response.content.decode('gbk')  # 在网页上查看编码格式
        # print(content)

        # 实例化BeautifulSoup对象
        soup = BeautifulSoup(content, 'html.parser')
        # print(soup)

        # divs=soup.find_all('div',class_="article-pic")
        uls = soup.find_all('ul', class_="article")
        for ul in uls:
            # 获取标题
            title = list(ul.find_all('h3'))
            # 获取更新日期
            times = list(ul.find_all('span', class_="fn-left"))
            # 获取内容
            profiles = list(ul.find_all('p'))

            # print(times,title,profiles)

            # 提取标签内的字符串和使用zip打包在一起
            for title, times, profiles in zip(title, times, profiles):
                title = title.string
                times = times.string
                profiles = profiles.string
                # 将数据存放在字典中
                car_news = {
                    "title": title,
                    "times": times,
                    "profiles": profiles,
                }
                news.append(car_news)

    except:
        continue

print(news)
  1. 输出结果

python爬虫小案例——汽车之家,python,爬虫

🌟总结

这里需要注意的是使用bs4语句获取的标签内容是bs4的类型,不是列表类型,所以使用了强制转换成列表【list()】.

拓展:
在Python爬虫中,即使代码看起来没有明显语法错误,爬取的数据仍然可能为空,这通常与以下因素有关:

  1. 目标网站结构改变
    如果爬虫是基于HTML结构编写的,而目标网站进行了改版或更新,原有的选择器(如XPath或CSS Selector)可能不再有效,导致找不到预期的数据。
  2. 动态加载内容
    网页上的数据可能是通过JavaScript动态加载的,直接爬取HTML源代码可能无法获取这些数据。此时需要分析网页加载逻辑,使用如Selenium、Pyppeteer等工具模拟浏览器行为,或者通过分析Ajax请求来间接获取数据。
  3. 反爬策略
    目标网站可能启用了反爬虫策略,比如Cookies验证、User-Agent限制、IP封锁、验证码、登录验证等。这时,需要针对这些策略进行相应的处理,比如设置更真实的User-Agent、使用代理IP池、处理验证码或模拟登录。
  4. 请求参数不正确
    请求头信息(headers)、cookies、POST数据等参数可能需要特殊配置才能获取数据,如果缺少必要参数或参数不正确,服务器可能不会返回有效数据。
  5. 网络问题
    即使代码看似没问题,网络连接不稳定或服务器端出现问题也可能导致无法获取数据。
  6. 解析逻辑错误
    数据解析环节可能出现问题,例如正则表达式匹配不正确,或者在解析HTML或JSON时引用了不存在的键或属性。
  7. API调用权限或频率限制
    若爬取的是API接口,可能存在调用频率限制、API密钥失效或没有必要的授权。
  8. 数据缓存问题
    如果爬虫有缓存机制并且缓存了错误的结果,新的爬取可能会直接读取缓存而非从服务器获取新数据。

要解决这个问题,可以从以下几个步骤入手:文章来源地址https://www.toymoban.com/news/detail-857127.html

  • 检查并确认请求网址是否正确且能够正常访问;
  • 使用开发者工具查看网页加载过程,确认数据是如何加载和呈现的;
  • 检查请求头和请求体是否符合目标网站的要求;
  • 检查解析代码逻辑,特别是提取数据的部分;
  • 检测网络状况以及是否有反爬措施,调整爬虫策略;
  • 对于动态加载内容,确保相应脚本能够正确执行或模拟;
  • 针对可能出现的API限制,合理安排请求间隔,遵循网站的使用协议。

到了这里,关于python爬虫小案例——汽车之家的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 聊一聊GIS之家团队数据案例源码共享以及在线体验

    目录 我们的初衷定位 我们的服务内容 我们的经营模式 GIS之家交流群 我们的未来规划 各平台账号 目前阶段我们团队创建的初衷定位,以服务初学者以及1-2年工作经验的giser为主。利用我们深耕gis行业领域多年gis项目以及工作经验优势,为他们提供地图数据和案例源码共享服

    2024年02月08日
    浏览(10)
  • Python爬虫-新能源汽车对应的“年份月份”销量榜

    Python爬虫-新能源汽车对应的“年份月份”销量榜

    前言 本文是该专栏的第15篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏前面,笔者有单独详细介绍采集新能源汽车销量榜,感兴趣的同学,可以往前翻阅查看《Python爬虫-新能源汽车销量榜》。而之后,也有很多同学单独私信,那如果要单独采集 某个年份 ,

    2024年02月03日
    浏览(76)
  • python爬虫实战案例——某站视频爬虫

    python爬虫实战案例——某站视频爬虫

    今天突然发现,某站的视频在电脑上是不能下载的。于是乎,就打算在电脑上爬取一下某站的视频。让大家在电脑上也能看, 某站的视频是音频和视频分开的,我在网上搜了一下,要用到一个叫ffmpeg的音视频合成的库,网上教程很多,大家搜一下就可以找到了,我就不在此赘

    2024年02月10日
    浏览(9)
  • Python爬虫实战案例——音乐爬虫,收费歌曲依旧可用

    Python爬虫实战案例——音乐爬虫,收费歌曲依旧可用

    因为现在众多音乐平台下载歌曲都要收费了,导致我没有车载音乐听了。于是便自学爬虫做了这个简易的音乐爬虫。不是那些大平台的音乐爬虫,是一个不知名的小音乐网站的爬虫。下面开始正题: 首先,便是找不是那几家大互联网公司的音乐网站,在我的不懈努力之下终于

    2024年02月03日
    浏览(16)
  • Python爬虫案例分享

    1. 导入所需库: requests 库:这是一个Python HTTP客户端库,用于发送HTTP请求。在这个案例中,我们使用它来向目标网站发送GET请求,获取网页内容。 BeautifulSoup 库:它是Python的一个解析库,主要用于解析HTML和XML文档。在爬虫项目中,我们经常用它来解析从网页获取的HTML文本,

    2024年01月19日
    浏览(9)
  • Python Selenium 爬虫淘宝案例

    Python Selenium 爬虫淘宝案例

    在前一章中,我们已经成功尝试分析 Ajax 来抓取相关数据,但是并不是所有页面都可以通过分析 Ajax 来完成抓取。比如,淘宝,它的整个页面数据确实也是通过 Ajax 获取的,但是这些 Ajax 接口参数比较复杂,可能会包含加密密钥等,所以如果想自己构造 Ajax 参数,还是比较困

    2024年02月20日
    浏览(11)
  • Python爬虫实战案例——第二例

    Python爬虫实战案例——第二例

    某某美剧剧集下载(从搜索片名开始) 本篇文章主要是为大家提供某些电影网站的较常规的下载电影的分析思路与代码思路(通过爬虫下载电影),我们会从搜索某部影片的开始直到成功下载某一部电影。 地址:aHR0cHM6Ly93d3cuOTltZWlqdXR0LmNvbS9pbmRleC5odG1s 先来分析页面 打开开发

    2024年02月11日
    浏览(9)
  • Python爬虫实战案例——第一例

    Python爬虫实战案例——第一例

    X卢小说登录(包括验证码处理) 地址:aHR0cHM6Ly91LmZhbG9vLmNvbS9yZWdpc3QvbG9naW4uYXNweA== 打开页面直接进行分析 任意输入用户名密码及验证码之后可以看到抓到的包中传输的数据明显需要的是 txtPwd 进行加密分析。按 ctrl+shift+f 进行搜索。 定位来到源代码中断点进行调试。 然后直接跟

    2024年02月12日
    浏览(12)
  • Python爬虫(十七)_糗事百科案例

    Python爬虫(十七)_糗事百科案例

    爬取糗事百科段子,假设页面的URL是: http://www.qiushibaike.com/8hr/page/1 使用requests获取页面信息,用XPath/re做数据提取 获取每个帖子里的用户头像连接、用户姓名、段子内容、点赞次数和评论次数 保存到json文件内 糗事百科

    2024年02月10日
    浏览(11)
  • 分享Python7个爬虫小案例(附源码)_爬虫实例

    分享Python7个爬虫小案例(附源码)_爬虫实例

    在这篇文章中,我们将分享7个Python爬虫的小案例,帮助大家更好地学习和了解Python爬虫的基础知识。以下是每个案例的简介和源代码: 1. 爬取豆瓣电影Top250 这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息,并将这些信息保存到CSV文件中。 2

    2024年04月16日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包