當前位置:菜譜大全網 - 菜譜 - python可以抓取哪些數據?

python可以抓取哪些數據?

首先,爬上我們需要的壹線鏈接

頻道_摘錄. py

這裏的壹線鏈接就是我們所說的大規模鏈接:

從bs4導入BeautifulSoupimport請求

start _ URL = '/Wu/' host _ URL = '/' def get _ channel _ URLs(URL):

wb_data = requests.get(url)

soup = beautiful soup(WB _ data . text,' lxml ')

links = soup.select('。fenlei & gtdt & gta ')#打印(鏈接)

對於鏈接中的鏈接:

page _ URL = host _ URL+link . get(' href ')

print(page _ URL)# get _ channel _ URLs(start _ URL)channel _ URLs = ' ' '

/佳居/

/日榮白貨/

/姬壽/

/班功/

/農用品/

/佳典/

/ershoubibibendiannao/

/阮健圖書/

/穎悠雲浮/

/diannao/

/xianzhilipin/

/fushixiaobaxuemao/

/梅榮花莊/

/馬舒/

/老年用品/

/xuniwupin/

'''123456789101112131415161718192021222324252627282930313233343536

然後以我爬的58同城為例,就是我爬了二手市場所有鏈接的類別,就是我說的。

找到這些鏈接的共同特征,用函數輸出,存儲為多行文本。

其次,獲取我們需要的詳情頁的鏈接和細節。

page_parsing.py

1,說說我們的數據庫:

先看代碼:

#從BS4導入庫文件導入漂亮的SoupiPort請求導入Pymongo # Python操作MongoDB庫導入重新導入time#鏈接並建立數據庫client = py mongo . mongo client(' localhost ',27017)。

史策=客戶端['史策'] #創建史策數據庫Ganji _ URL _ list =史策['Ganji _ URL _ list'] #創建表文件Ganji _ URL _ info =史策[' Ganji _ URL _ info ']123456789100。

2.判斷頁面結構是否匹配我們想要的頁面結構,比如有時候有404頁;

3.從頁面中提取出我們想要的鏈接,也就是各個詳情頁的鏈接;

這裏我們要說的是壹種方式:

item_link = link.get('href ')。拆分('?')[0]12

這裏是什麽樣的鏈接,這個get方法又是什麽鬼?

後來發現這種類型是

& ltclass ' bs4 . element . tab & gt;1

如果我們想單獨獲得壹個屬性,我們可以這樣做,例如,我們從哪個類獲得它?

打印soup.p['class']

#['title']12

還可以使用get方法傳入屬性的名稱,這是等效的。

print soup . p . get(' class ')#[' title ']12

讓我粘貼下面的代碼:

#抓取所有產品詳情的頁面鏈接:def get_type_links(channel,num):

list_view = '{0}o{1}/'。格式(頻道,字符串(數字))#打印(列表視圖)

wb_data = requests.get(list_view)

soup = beautiful soup(WB _ data . text,' lxml ')

Linkon = soup.select('。page box))#判斷是否是我們需要的頁面的logo

#如果已爬網的選擇鏈接如下所示:div.pageBox > ul & gt李:n-child(1)>a & gt這裏的span:n-child(1)要刪除。

#打印(鏈接)

如果鏈接:

link = soup.select('。zz & gt。ZZ-til & gt;a’)

link_2 = soup.select('。js-item & gt;a’)

link = link+link _ 2 # print(len(link))

對於link中的linkc:

linkc = linkc.get('href ')

ganji _ URL _ list . insert _ one({ ' URL ':linkc })

打印(linkc)其他:pass 123456789101121314151617181920

4.在詳細信息頁面中抓取我們需要的信息。

我貼個代碼:

#抓取趕集網詳情頁鏈接:def get_url_info_ganji(url):

時間.睡眠(1)

wb_data = requests.get(url)

soup = beautiful soup(WB _ data . text,' lxml ')嘗試:

選擇(' head & gttitle')[0]。文本

timec = soup.select('。pr-5')[0].text.strip()

type = soup.select('。det-infor & gt;李& gtspan & gta')[0]。文本

price = soup.select('。det-infor & gt;李& gti')[0]。文本

place = soup.select('。det-infor & gt;李& gta')[1:]

placeb = []為placec in place:

placeb.append(placec.text)

tag = soup.select('。second-dt-be write & gt;ul & gt李')[0]。文本

標記=“”。join(tag . split())# print(time . split())

data = { 'url' : url,' title' : title,' time' : timec.split(),' type' : type,' price' : price,' place' : placeb,' new' : tag

}

ganji _ URL _ info . insert _ one(data)#向數據庫中插入壹條數據;

打印(數據)除索引錯誤:pass 1234567891011213141516171819202122232438

四、我們的主函數怎麽寫?

main.py

看看代碼:

#先從其他文件導入函數和數據:從多處理導入池from page _ parsing導入get _ type _ links,get _ URL _ info _ ganji,Ganji _ URL _ list from channel _ extractimportchannel _ URLs #爬網所有鏈接的函數:def get_all_links_from(channel):

對於範圍內的I(1,100):

在get_type_links(channel,i)#之後,執行此函數抓取詳情頁上的所有文件:if _ _ name _ = ' _ _ main _ ':# pool = pool()# # pool = pool . map(get _ URL _ info _ ganji,[URL[' URL ']for URL in ganji _ URL _ list . find()])# pool . close()# pool . join()#首先執行以下函數抓取所有鏈接:if _ _ name _ =' _ _ main _ _ ':

pool = Pool()

pool = Pool()

pool.map(get_all_links_from,channel_urls.split())

pool.close()

pool . join()1234567891011213141617181920212223242526

動詞 (verb的縮寫)計數程序

count.py

用於顯示已爬網數據的數量;

導入時間from page_parsing導入ganji_url_list,ganji _ URL _ info while True:# print(ganji _ URL _ list . find()。count())

#時間.睡眠(5)

print(ganji_url_info.find()。count())

時間.睡眠(5)