傳送門:
最近因為工作的事比較忙,要學的東西也很多,沒有及時更新,下一階段我會盡力一天一更的,一塊學習的朋友跟緊不走丟ヽ(ˋ▽ˊ)ノ
每時每刻,搜尋引擎和網站都在採集大量資訊,非原創即採集。採集資訊用的程式一般被稱為網路爬蟲(Web crawler)、網路蜘蛛(Web spider),其行為一般是先“爬”到對應的網頁上,再把需要的資訊“鏟”下來。說的通俗易懂一點網路資料採集程式也像是一隻辛勤採蜜的小蜜蜂,它飛到花(目標網頁)上,採集花粉(需要的資訊),經過處理(資料清洗、儲存)變成蜂蜜(可用的資料)。
1.處理不同格式的資料
網路資料採集大有所為。在大資料深入人心的時代,網路資料採集作為網路、資料庫與機器學習等領域的交匯點,已經成為滿足個性化網路資料需求的最佳實踐。搜尋引擎可以滿足人們對資料的共性需求,即**“所見即所得”,而網路資料採集技術可以進一步精煉資料**,把網路中雜亂無章的資料聚合成合理規範的形式,方便分析與挖掘,真正實現“通過資料進行分析”。工作中,你可能經常為找資料而煩惱,或者眼睜睜看著眼前的幾百頁資料卻只能長恨咫尺天涯,又或者資料雜亂無章的網站中滿是帶有陷阱的表單和坑爹的驗證碼,甚至需要的資料都在網頁版的 PDF 和網路圖片中。而作為一名反爬蟲工程師,你也需要了解常用的網路資料採集手段,以及常用的網路表單安全措施,以提高網站訪問的安全性,所謂道高一尺,魔高一丈...(所以對於爬蟲工程師來說每天都是不停地和對方的反爬工程師鬥智鬥勇,這個改天再嘮...)
扯得有點遠 ,我們言歸正傳,網路資料採集之前我們先了解一下怎麼對不同格式的資料進行處理...
1.處理CSV格式資料
1.下載資料
資料來源:http://data.stats.gov.cn/easyquery.htm?cn=C01
2.處理資料
注意:處理Excel格式、Json格式資料資料也類似,分別使用Pandas中的read_excel()
方法和read_json()
方法。
3.處理XML格式資料
2.網路爬蟲
這部分由於之前寫過,這裡就不再進行詳細寫了,可以參考往期文章。
- Python網路爬蟲(一)- 入門基礎
- Python網路爬蟲(二)- urllib爬蟲案例
- Python網路爬蟲(三)- 爬蟲進階
- Python網路爬蟲(四)- XPath
- Python網路爬蟲(五)- Requests和Beautiful Soup
- Python網路爬蟲(六)- Scrapy框架
- Python網路爬蟲(七)- 深度爬蟲CrawlSpider
- Python網路爬蟲(八) - 利用有道詞典實現一個簡單翻譯程式
- 利用簡書首頁文章標題資料生成詞雲
- Spider與OpenPyXL的結合
- 爬取拉勾網招聘資訊並使用xlwt存入Excel
- Python可以做哪些好玩的事之自動刷票
- Selenium與PhantomJS
- 使用Selenium抓取QQ空間好友說說
- Selenium 的使用
3.小試牛刀
說了那麼多理論性的東西,接下來就開始步入正軌了。
1.獲取騰訊新聞首頁新聞標題及連結,並以Excel形式儲存
import requests
import pandas
from bs4 import BeautifulSoup
res = requests.get('https://news.qq.com/') # 資料採集目標地址
soup = BeautifulSoup(res.text, 'html.parser') # 解析網頁
newsary = [] # 定義空列表
for news in soup.select('.Q-tpWrap .text'):
newsary.append({'title': news.select('a')[0].text,
'url':news.select('a')[0]['href']}) # 分別獲取超連結中文字資訊和href屬性,即地址
newdf = pandas.DataFrame(newsary) # 建立一個DataFrame
newsdf.to_excel('news.xlsx') # 輸出到excel表格
print(newsary[0])
複製程式碼
2.抓取**房天下**房價資訊並儲存
import requests
import pandas as pd
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
ua_list = UserAgent() # 設定user-agent列表,每次請求時,隨機挑選一個user-agent
my_headers = {
'user-agent': ua_list.random
}
# 獲取所有的url
def get_url():
num = 1
sum_url = []
while num < 101:
usual_url = 'http://esf.sh.fang.com/house/i3'
home_url = usual_url + str(num)
print(home_url)
res = requests.get(url=home_url, headers=my_headers)
num+=1
soup = BeautifulSoup(res.text, 'html.parser')
domain = 'http://esf.sh.fang.com'
for house in soup.select('.houseList dl'):
try:
# title = house.select('.title')[0].text.strip() # 清除多餘的換行
url1 = domain + house.select('.title a')[0]['href']
sum_url.append(url1)
except Exception as e:
print(e)
print(len(sum_url))
return sum_url
def houseary():
houseary_url = get_url()
houseary = []
for url in houseary_url:
print(url)
content = requests.get(url=url, headers=my_headers)
soup1 = BeautifulSoup(content.text, 'html.parser')
try:
info = {}
info['標題'] = soup1.select('.title')[0].text.strip()
info['總價'] = soup1.select('.trl-item')[0].text
info['戶型'] = soup1.select('.tt')[0].text.strip()
info['建築面積'] = soup1.select('.tt')[1].text
info['單價'] = soup1.select('.tt')[2].text
info['朝向'] = soup1.select('.tt')[3].text
info['樓層'] = soup1.select('.tt')[4].text
info['裝修'] = soup1.select('.tt')[5].text
info['小區'] = soup1.select('.rcont')[0].text.strip().replace('\n', '')
info['區域'] = soup1.select('.rcont')[1].text.replace('\n', '').replace('\r', '').replace(' ', '')
info['經紀人'] = soup1.select('.pn')[0].text
info['聯絡電話'] = soup1.select('.pnum')[0].text
houseary.append(info)
except Exception as e:
print(e)
print(houseary)
print(len(houseary))
df = pd.DataFrame(houseary)
df.to_excel('house.xlsx')
if __name__ == '__main__':
houseary()
複製程式碼
後臺執行程式,經過半個小時的戰績,總算把資料爬下來了,這個效率我覺得是時候學一波分散式爬蟲了...
拿到了資料,我們就該做資料的清理了,下一階段資料的清理、資料探索與資料視覺化...