2.2 主函式
3、總結
看看生豬**,確定後面飯桌的菜餚。。。話不多說,練習開始。。。
如圖,從網頁結構看,資料是分省份,城市地區的,爬蟲如果要做到獲取不同省份,不同城市地區的完整資訊,先要做一次篩選,獲取各省份,各城市地區的鏈結
篩選後的網頁:
最終資訊所在的頁面顯示,這裡就是想要獲取的資訊:
**方式還是採取最基本的requests+bs4方法(小菜鳥就只會這個 ̄□ ̄||)
import requests
from bs4 import beautifulsoup
import pandas as pd
import re
import time
2.1.1構造主頁資訊函式:def
get_datas
(url,headers)
: html = requests.get(url,headers = headers)
soup = beautifulsoup(html.text,
'lxml'
) datas = soup.select(
)return datas
2.1.2 構造獲取省份、城市地區的資訊函式:def
get_province
(datas)
: dic =
province_ls =
province_url_ls =
for i in
range(56
,86):
dic[datas[i]
.text]
=''+datas[i]
['href'
]return dic
台灣省的獲取在這裡,上述30個省份,隨便選乙個後,這裡可以獲取到台灣省的鏈結,需要單獨獲取。
def
get_city
(url,headers)
: datas = get_datas(url,headers)
taiwan_dic =
dic =
city_ls =
city_url_ls =
taiwan_dic[
'台灣'
]= datas[86]
['href'
]for i in
range
(len
(datas)):
try:
a = datas[i]
['href'
] r1 = re.match(
'^list.*?city.*?html'
,a) url =
''+r1.group(
)except
:pass
for j in
range(86
,86+len
(city_url_ls)+1
): .text)
for n in
range
(len
(city_url_ls)):
city = city_ls[n+1]
#這裡不加1,會把台灣省放進來
city_url = city_url_ls[n]
dic[city]
= city_url
return dic,taiwan_dic
2.1.3 獲取底層網頁資訊
這裡主要是用正規表示式篩選,然後補全**。
def
get_each_url
(url,headers)
: datas = get_datas(url,headers)
ls =
n=1for i in
range
(len
(datas)):
try:
n+=1 data = datas[i]
['href'
] r1 = re.match(
'^view-.*?html'
,data)
url =
''+r1.group(
)except
:pass
return ls
2.1.4 獲取資訊
用split做資料處理後,可以直接拿到資料
def
get_messages
(url,headers)
: dic =
html = requests.get(url,headers = headers)
soup = beautifulsoup(html.text,
'lxml'
) datas = soup.select(
'.xinxi_con .tbpara'
) datas = datas[0]
.text.split(
) dic[
'發布日期'
]= datas[1]
dic[
'**地點'
]= datas[3]
+ datas[4]
+ datas[5]
dic[
'產品名稱'
]= datas[7]
dic[
'產品類別'
]= datas[9]
dic[
'**'
]= datas[11]
dic[
'ip位址'
]= datas[17]
return dic
**執行有重複值,目前沒找到在哪,坑_(:з」∠)_,資料均為做後續處理,ip值有些會位數不對。。。
if __name__ ==
'__main__'
: url =
''headers =
datas = get_datas(url,headers)
province_url = get_province(datas)
taiwan_dic = get_city(province_url[
'北京市'
],headers)[1
] province_url[
'台灣'
]= taiwan_dic[
'台灣'
]# #例:獲取廣西南寧地區的豬價
search_province_url = province_url[
'廣西'
] city_url = get_city(search_province_url,headers)[0
]['南寧市'
] each_ls = get_each_url(city_url,headers)[:
20]all_ls =
n =1 m =
1for url in each_ls:
print
(url)
try:
dic = get_messages(url,headers)
print
(f'獲取第條資料'
) n+=
1 time.sleep(1)
except
:print
) m+=
1 df = pd.dataframe(all_ls)
df.to_csv(
'未處理的資料.csv'
,encoding =
'gbk'
)
3.1 此次**要點主要是分析網頁結構,確認需要獲取的資料怎麼來的,如**的寫法,需要不斷的取列印檢查,此方法比較耗時。
3.2 獲取的資訊有時不在看到的位置,需要注意觀察網頁變化情況,如台灣省的資料鏈結。
看小說新技能Get 爬蟲練習
想看 但是 的廣告又層出不窮,點一頁出來乙個廣告,攔截廣告的操作我又不是很熟練,那就把 資源移動到沒有廣告的地方吧 我不寫 但我是 的搬運工。搬運第一步,瞄準 開啟f12,看看內容在 nice 竟然光明正大的放在這兒,那就別怪我搬運了 魔鬼臉,嘿嘿 要搬就得全部搬走,先把每一章的 給他搬過來。上搬運...
scrapy爬蟲練習
這是一篇學習的練習 1.建立工程 scrapy startproject movie2.建立爬蟲 cd movie scrapy genspider meiju meijutt.com3.自動建立目錄 4.設定資料儲存模板 items.py import scrapy class movieitem...
新手爬蟲練習
總結本人使用的是wing python ide 會放在下面 如下 示例 import bs4 from bs4 import beautifulsoup import urllib.request from urllib.request import urlopen,request import r...