Python BeautifulSoupとRequests爬虫類は中関村の携帯電話の資料を取ります
**
一、事前準備
**目標:www.zolを這い取る.com.cnの収集資料、各種パラメータライブラリ:BeautifulSoupとrequests.BeautifulSoupライブラリのfindとfind_allには基本的な理解があり、requestsライブラリのgetメソッドについて基本的な理解があります.原網ページ分析:URL:(第1ページ)http://detail.zol.com.cn/cell_phone_index/subcate57_0_list_1_0_1_1_0_1.html分析ページ要素:マウスの右ボタン→審査要素→「Elements」→ページの更新→データがザラザラと表示されます.
**
二、シロウォーミングアップ
**以下の暴力はホームページの一部を抜粋して整理して、これを例にして、まずみんなに1つの直観的な感じを与えて、すぐに1段のコードが来ないようにして、どこから手をつけて、頭はすべて大きくなりました~~~まず下のこの段をコピーして、自分で実行してみます
一歩一歩テストし、得られた結果が予想に合っているかどうかを確認し、絶えず改善しています.
上の点ができたら,次は当たり前のようにして,動き出した.
**
三、実戦
**
実は主な内容はすべて下の2枚の図の中で、あなたはマウスをこれらの色とりどりのコードの上でホームページに置くだけで影が覆われて、このようにどのコードがホームページのどの内容に対応するかを見ることができます.このコードを確定したら、このコードの分析に専念して、それがどんな特徴があるかを見て、Pythonでそれを位置決めして、あなたが望んでいる を取得することができます.
参照先:https://blog.csdn.net/qq_40523096/article/details/88544692
一、事前準備
**目標:www.zolを這い取る.com.cnの収集資料、各種パラメータライブラリ:BeautifulSoupとrequests.BeautifulSoupライブラリのfindとfind_allには基本的な理解があり、requestsライブラリのgetメソッドについて基本的な理解があります.原網ページ分析:URL:(第1ページ)http://detail.zol.com.cn/cell_phone_index/subcate57_0_list_1_0_1_1_0_1.html分析ページ要素:マウスの右ボタン→審査要素→「Elements」→ページの更新→データがザラザラと表示されます.
**
二、シロウォーミングアップ
**以下の暴力はホームページの一部を抜粋して整理して、これを例にして、まずみんなに1つの直観的な感じを与えて、すぐに1段のコードが来ないようにして、どこから手をつけて、頭はすべて大きくなりました~~~まず下のこの段をコピーして、自分で実行してみます
html="""
OPPO Ace 2(8 GB/128 GB/フルネット /5 G )
- 4G : TD-LTE
- :6.55 2400x1080
- CPU : 865
iQOO Neo 3(6 GB/128 GB/フルネット /5 G )
- 4G : TD-LTE
- :6.57 4800x1080
- CPU : 865
"""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
>>>
一歩一歩テストし、得られた結果が予想に合っているかどうかを確認し、絶えず改善しています.
上の点ができたら,次は当たり前のようにして,動き出した.
**
三、実戦
**
実は主な内容はすべて下の2枚の図の中で、あなたはマウスをこれらの色とりどりのコードの上でホームページに置くだけで影が覆われて、このようにどのコードがホームページのどの内容に対応するかを見ることができます.このコードを確定したら、このコードの分析に専念して、それがどんな特徴があるかを見て、Pythonでそれを位置決めして、あなたが望んでいる を取得することができます.
import time
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
def get_value(url):
soup=bs(htmltext,"html.parser")
Dic1={
"NAME":[],"PRICE":[],"DATE":[]}
Dic2={
}
num=0
for z in soup.find("div",class_="list-box").find_all("div",class_="price-box"):
try:
price=z.find("b",class_="price-type").string
except:
price="n/a"
Dic1["PRICE"].append(price)
try:
shelfdate=z.find("span",class_="date").string
except:
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").string
Dic1["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"]*num
Dic2[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+=1
return 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_encoding
htmltext=response.text
d=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