**

一、事前准备

**
目标:爬取www.zol.com.cn的收集资料,各种参数
:BeautifulSoup和requests。对BeautifulSoup库的find和find_all有基本的了解,对requests库的get方法有基本的了解。
原网页面分析
网址:(第一页)http://detail.zol.com.cn/cell_phone_index/subcate57_0_list_1_0_1_1_0_1.html
分析页面元素:鼠标右键→审查元素→“Elements”→刷新页面→就可以看到数据哗哗哗地显示出来了,这就是我们下面将要分析的东东~~~

**

二、小白热身

**
以下暴力摘抄整理了网页的部分内容,以此为例,先给大家一个直观的感受,免得一上来就是一大段代码,不知从何下手,头都大了~~~
先把下面这段拷贝下来,自己运行下试试

html="""
<body class="list-for-mobile-phone">
<div class="content">
<div class="list-box"><div class="pro-intro"><h3><a href="/cell_phone/index1316807.shtml" target="_blank">OPPO Ace2(8GB/128GB/全网通/5G版)</a></h3><ul class="param clearfix"><li title="移动TD-LTE,联通TD-LTE,联通FDD-LTE,电信TD-LTE,电信FDD-LTE"><span>4G网络:</span>移动TD-LTE</li><li title="6.55英寸  2400x1080像素"><span>主屏尺寸:</span>6.55英寸  2400x1080像素</li><li title="高通 骁龙865"><span>CPU型号:</span>高通 骁龙865</li></ul></div><div class="price-box"><span class="price price-normal"><b class="price-sign">¥</b><b class="price-type">2698</b></span><span class="price-attr">[128GB行货]</span>            <span class="date">2020-05-14</span><p class="mernum"><a href="/1319/1318500/price.shtml" target="_blank">1家商家报价</a></p><a href="/1319/1318500/price.shtml" class="base" target="_blank">查询底价</a></div><div class="pro-intro"><h3><a href="/cell_phone/index1316807.shtml" target="_blank">iQOO Neo3(6GB/128GB/全网通/5G版)</a></h3><ul class="param clearfix"><li title="移动TD-LTE,联通TD-LTE,联通FDD-LTE,电信TD-LTE,电信FDD-LTE"><span>4G网络:</span>移动TD-LTE</li><li title="6.57英寸  2408x1080像素"><span>主屏尺寸:</span>6.57英寸  4800x1080像素</li><li title="高通 骁龙865"><span>CPU型号:</span>高通 骁龙865</li></ul></div><div class="price-box"><span class="price price-normal"><b class="price-sign">¥</b><b class="price-type">5988</b></span><span class="price-attr">[128GB厂商指导价]</span>          <span class="date">2020-05-14</span><p class="mernum"><a href="/1316/1315874/price.shtml" target="_blank">92家商家报价</a></p><a href="/1316/1315874/price.shtml" class="base" target="_blank">查询底价</a></div></div>
</div>
</div>
"""
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,"html.parser")
a=soup.find("div",class_="list-box").find_all("div",class_="price-box")
print(a)
print("find_all返回值的数量:",len(a))
print("find_all返回值的类型:",type(a))
#print("find_all返回值的第一个值:",a[0])
for i in a:print(i.find("b",class_="price-type").string)print("......","这是find_all返回值的第一个标签'b'的内容","......")
>>>[<div class="price-box">
<span class="price price-normal"><b class="price-sign">¥</b>
<b class="price-type">2698</b>
</span><span class="price-attr">[128GB行货]</span>
<span class="date">2020-05-14</span>
<p class="mernum"><a href="/1319/1318500/price.shtml" target="_blank">1家商家报价</a></p>
<a class="base" href="/1319/1318500/price.shtml" target="_blank">查询底价</a>
</div>, <div class="price-box">
<span class="price price-normal"><b class="price-sign">¥</b>
<b class="price-type">5988</b>
</span><span class="price-attr">[128GB厂商指导价]</span>
<span class="date">2020-05-14</span>
<p class="mernum"><a href="/1316/1315874/price.shtml" target="_blank">92家商家报价</a></p>
<a class="base" href="/1316/1315874/price.shtml" target="_blank">查询底价</a>
</div>]find_all返回值的数量: 2
find_all返回值的类型: <class 'bs4.element.ResultSet'>
2698
...... 这是find_all返回值的第一个标签'b'的内容 ......
5988
...... 这是find_all返回值的第一个标签'b'的内容 ......
>>>
for i in soup.find("div",class_="list-box").find_all("div",class_="pro-intro"):print(i.find("span").string)print(type(i.find("span").string))print(i.find("span").string[1])
>>>4G网络:
<class 'bs4.element.NavigableString'>
G
4G网络:
<class 'bs4.element.NavigableString'>
G
from bs4 import BeautifulSoup as bs
soup=bs(html,"html.parser")
for i in soup.find("div",class_="list-box").find_all("div",class_="pro-intro"):print(i.find("h3").string)for j in i.find("ul",class_="param clearfix").find_all("li")[1:]:print(j)
>>>OPPO Ace2(8GB/128GB/全网通/5G版)
<li title="6.55英寸  2400x1080像素"><span>主屏尺寸:</span>6.55英寸  2400x1080像素</li>
<li title="高通 骁龙865"><span>CPU型号:</span>高通 骁龙865</li>
iQOO Neo3(6GB/128GB/全网通/5G版)
<li title="6.57英寸  2408x1080像素"><span>主屏尺寸:</span>6.57英寸  4800x1080像素</li>
<li title="高通 骁龙865"><span>CPU型号:</span>高通 骁龙865</li>
from bs4 import BeautifulSoup as bs
soup=bs(html,"html.parser")
for i in soup.find("div",class_="list-box").find_all("div",class_="pro-intro"):print(i.find("h3").string)for j in i.find("ul",class_="param clearfix").find_all("li")[1:]:print(j.find("span").string[:-1])
>>>OPPO Ace2(8GB/128GB/全网通/5G版)
主屏尺寸
CPU型号
iQOO Neo3(6GB/128GB/全网通/5G版)
主屏尺寸
CPU型号
from bs4 import BeautifulSoup as bs
soup=bs(html,"html.parser")
for i in soup.find("div",class_="list-box").find_all("div",class_="pro-intro"):for j in i.find("ul",class_="param clearfix").find_all("li")[1:]:print(j["title"])
>>>6.55英寸  2400x1080像素
高通 骁龙865
6.57英寸  2408x1080像素
高通 骁龙865
>>>

一步步测试,查看得到的结果是否符合预期,不断完善。

上面的这点搞定,下面就顺理成章,开动啦

**

三、实战

**

其实主要的内容都在下面这两张图里了,你只要把鼠标放在这些五颜六色的代码上网页就会出现阴影覆盖,这样就可以看到哪一块代码对应网页的哪块内容。确定这块代码后,就可以专心分析这段代码,看看它有什么特点,然后用Python定位它,获取你想要的

import time
import requests
from bs4 import BeautifulSoup as bs
import pandas as pddef get_value(url):soup=bs(htmltext,"html.parser")Dic1={"NAME":[],"PRICE":[],"DATE":[]}Dic2={}num=0for z in soup.find("div",class_="list-box").find_all("div",class_="price-box"):try:price=z.find("b",class_="price-type").stringexcept:price="n/a"Dic1["PRICE"].append(price)try:shelfdate=z.find("span",class_="date").stringexcept:shelfdate="n/a"Dic1["DATE"].append(shelfdate)for i in soup.find("div",class_="list-box").find_all("div",class_="pro-intro"):a=i.find("h3").find("a").stringDic1["NAME"].append(a)for j in i.find("ul",class_="param clearfix").find_all("li")[1:]:c1=j.find("span").string[:-1]if c1 not in Dic1:Dic1[c1]=["N/A"]*numDic2[c1]=j["title"]for key in Dic1:if key!="NAME" and key!="PRICE" and key!="DATE":try:Dic1[key].append(Dic2[key])except:Dic1[key].append("N/A")num+=1return Dic1
total=[]
for i in range(1,3):url="http://detail.zol.com.cn/cell_phone_index/subcate57_0_list_1_0_1_1_0_{0}.html".format(i)head={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}response=requests.get(url,headers=head)response.encoding=response.apparent_encodinghtmltext=response.textd=get_value(url)data=pd.DataFrame(d)data=data.loc[:,["NAME","CPU型号","电池容量","主屏尺寸","CPU频率","后置摄像头","RAM容量","DATE","PRICE"]]total.append(data)D=pd.concat(total,ignore_index=True)print("---完成第",i,"页,获取了",len(D["NAME"]),"条,积累了",len(D["NAME"]),"条")time.sleep(3)
D.to_csv(r"c:\users\admin\desktop\中关村手机资料.csv")
print("爬取完成,共计有",len(D["NAME"]),"条")
data.head()
---完成第 1 页,获取了 48 条,积累了 48 条
---完成第 2 页,获取了 96 条,积累了 96 条
爬取完成,共计有 96 条
>>>

参考:https://blog.csdn.net/qq_40523096/article/details/88544692

Python BeautifulSoup和Requests爬虫爬取中关村手机资料相关推荐

  1. python bs4 csv requests 爬虫 爬取携程火车票网址信息并保存

    目的:爬取携程网址 火车 中的单程与中转 单程 url="https://trains.ctrip.com/trainbooking/search?tocn=%25e5%258d%2583% ...

  2. 菜鸟爬取中关村手机详情页参数及报价

    菜鸟爬取中关村手机详情页参数及报价 背景介绍: 需求是爬取所有手机详情页各个手机型号对应的价位区间及参数: 此前没有爬虫经历,套用网上教程屡屡报错,痛定思痛决定自己搜索爬虫框架,参照官方文档并整理网页 ...

  3. mysql scrapy 重复数据_大数据python(scrapy)爬虫爬取招聘网站数据并存入mysql后分析...

    基于Scrapy的爬虫爬取腾讯招聘网站岗位数据视频(见本头条号视频) 根据TIOBE语言排行榜更新的最新程序语言使用排行榜显示,python位居第三,同比增加2.39%,为什么会越来越火,越来越受欢迎 ...

  4. python之利用requests库爬取西刺代理,并检验IP的活性

    用爬虫爬取某个网站的数据时,如果用一个IP频繁的向该网站请求大量数据,那么你的ip就可能会被该网站拉入黑名单,导致你不能访问该网站,这个时候就需要用到IP动态代理,即让爬虫爬取一定数据后更换IP来继续 ...

  5. 用Python写一个网络爬虫爬取网页中的图片

    写一个爬虫爬取百度贴吧中一个帖子图片 网址:壁纸 用谷歌浏览器的开发工具检查网页,可以发现其每一张图片都有如下格式 <img class="BDE_Image" src=&q ...

  6. Python爬虫笔记之用BeautifulSoup及requests库爬取

    这次要爬取的是一个壁纸网站wallhaven,里面有很多用户上传的高清壁纸分享.点击进去会出现一个搜索页面,输入dota2,这就得到了我们要爬取的第一个url:"https://alpha. ...

  7. python requests爬虫——爬取李开复博客信息(包括javascript部分信息)

    今天是国庆假期第二天,已经玩了一天了,今天整理一下前两天写的数据分析作业思路,给实验报告打一下底稿.供对爬虫有兴趣的小伙伴们参考,也希望给实验没完成的同学提供一点小小的帮助. 任务要求. 1)分析页面 ...

  8. python xpath循环_Python爬虫 爬取北京二手房数据

    点击蓝字"python教程"关注我们哟! 前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及 ...

  9. python实践3——利用爬虫爬取“广州各大行业微信群二维码信息”及存入数据到MySQL数据库

    本次以"广州各大行业微信群二维码信息"为例,利用爬虫进行信息"爬取",并存入数据库,方便后面数据分析处理,以及调用.话不多说,直接上代码: [python] v ...

最新文章

  1. 比特币官网管理者因支持BCH被建议移交权限
  2. Scrapy框架的学习(3.pipeline介绍以及多个爬虫的pipeline的使用)
  3. 搭建一个自己的SVN服务器
  4. iamond operator is not supported in -source 1.5
  5. 本地修改指向服务器,本地修改指向服务器
  6. 大小端模式的快速判断方法
  7. 仅剩296个免费名额,AI工程师进阶必修课今日领取
  8. C语言 const 笔记
  9. NeHe OpenGL教程 第四十五课:顶点缓存
  10. 什么是GaussDB
  11. Git学习笔记:一台电脑上配置两个git账户
  12. Windows命令行工具cmder配置
  13. ubuntu安装Arial.ttf字体
  14. 购物网站 前台后台 思维导图_「培哥学堂」60套思维导图PPT送给你,让你的工作事半功倍!(建议收藏)...
  15. Mac本配置adb环境,通过adb安装apk。
  16. java uclinux_Java在基于uclinux的嵌入式系统中的应用
  17. 零基础学python_03_字符串(拼接+换行+制表符)
  18. 2022java:eclipse编译器下载与配置详细
  19. jq加载json数据实现三级联动
  20. Error: open failed in procedure ‘program‘ ** OpenOCD init failed ** shutdown command invoked

热门文章

  1. nosql----redis数据恢复方案
  2. P2512 [HAOI2008]糖果传递
  3. Android-入门学习笔记-JSON 解析
  4. bootstrap datetimepicker 复选可删除,可规定指定日期不可选
  5. bzoj3202:[Sdoi2013]项链
  6. TabBar与下拉列表访问数据与刷新
  7. crt安装mysql安装包_Linux安装MySQL步骤
  8. 桌面上的计算机图标一直被选定,常见电脑桌面图标问题十则
  9. android surface编程,Android编程之SurfaceView实例详解
  10. python3的xpath_python3爬虫之xpath