以下功能均在jupyter notebook上實現。
python及相應爬蟲工具安裝請參考部落格:
一、 爬蟲介紹:
1. 非結構化資料(沒有固定格式):如網頁資料,必須通過etl(extract(抽取) transformation(轉換) loading(組成))工具將數 據轉化為結構化資料才能取用。raw data(原始資料) --> elt script(etl指令碼) --> tidy data(結構化資料)
3. 爬蟲工具:二、 基礎功能介紹:chrome控制台:檢查 --> network --> (js,css,img,doc)(重新整理)
通過pip安裝套件:pip install requests
pip install beautifulsoup4
infolite
三. 爬蟲例項:獲取使用者當前位置資訊,並獲取附近學校、醫院、商場最近一年的新聞。
import requests,json
import string
import datetime
from bs4 import beautifulsoup
datenow = datetime.datetime.now().strftime('%y-%m-%d')
datenow = int(datenow[0:4])*12 + int(datenow[5:7])
#利用使用者當前的ip進行定位1- -
def getipaddress():
res = requests.get('')
res.encoding = 'utf-8'
ipjson = json.loads(res.text)
ipget = ipjson['result']['ip']
latget = ipjson['result']['location']['lat']
lngget = ipjson['result']['location']['lng']
locationget = ipjson['result']['ad_info']['nation'] + ipjson['result']['ad_info']['province'] + ipjson['result']['ad_info']['city']
print('所在地:',locationget)
print('經度:',latget,'緯度:',lngget,'\n')
if len(ipjson['result']['ad_info']['city']) > 0:
locationget = ipjson['result']['ad_info']['city']
elif len(ipjson['result']['ad_info']['province']) > 0:
locationget = ipjson['result']['ad_info']['province']
else:
locationget = '中國'
return locationget
#利用使用者當前的ip進行定位- -1
#獲取新聞的標題、鏈結、發布者、時間2- -
def getnews(searchcontent,page):
#p1 獲取網頁原始碼
page = page*10
page='%d' %page
url = '' + searchcontent + '&pn='+ page
res = requests.get(url)
res.encoding = 'utf-8'
soup = beautifulsoup(res.text,'html.parser')
#p2 獲取新聞列表
for news in soup.select('.result'):
title = news.select('a')[0].text.strip()
link = news.select('a')[0]['href']
timemedia = news.select('p')[0].text
timemedia = timemedia.replace('\n',' ').replace('\n',' ').strip().replace(' ','').replace('\t','')
time = timemedia[-16:]
media = timemedia[:-17]
print(title,'\n',link,'\n')
#p3 判斷文章是否到底,時間是否超限
switchpages = soup.select('#page')
lastpage = switchpages[0].select('a')[-1].text.replace('>','')
datearticle = int(time[0:4])*12 + int(time[5:7])
dateinterval = datenow - datearticle
return -1
else:
return 0
#獲取新聞的標題、鏈結、發布者、時間- -2
#查詢使用者所在地附近的商場,學校,醫院3- -
def getorg(keyword,page):
address = getipaddress()
page='%d' %page
url = ''+ address + ',0)&keyword='+ keyword + '&page_size=20&page_index='+ page + '&orderby=_distance&key=e3ybz-xbbku-xpsvv-bxtqf-x26as-7lfdd'
res = requests.get(url)
orgjson = json.loads(res.text)
for item in orgjson['data']:
print(item['title'],'\n經度:',item['location']['lat'],'\t緯度:',item['location']['lng'],'\n')
#查詢使用者所在地的商場,學校,醫院- -3
#1.獲取實體的位置資訊:
#address = getipaddress()
#2. 獲取附近的醫院、學校、商場的資訊
#getorg('醫院',1)
#3. 獲取最近一年的新聞
#isend = getnews('哈爾濱購物',0)
#if(isend == -1):
# print('已載入全部新聞')
#else:
Python爬蟲初探
閒來無事研究了一下python的爬蟲技術,現在總結一下 testclass.py 檔案 加上這個可以輸入中文 coding utf 8 匯入幾個內建庫 import urllib import urllib2 import re import mytool 模擬瀏覽器和請求頭,否則顯示訪問出錯 us...
python爬蟲初探
確保程式引用類庫是否是引用的該目錄,否則會出現pip install chardet 後,無法在專案中呼叫chardet的問題.可能在會出現pip安裝到 usr local lib python2.7 dist packages下,但是程式在 usr local lib python2.7 dist...
Python爬蟲 初探多執行緒爬蟲
上篇,我們已經建立了乙個基本的爬蟲,用來抓取動態網頁的資訊。經過測試,爬蟲的速度太慢,我們需要改進。這篇我會介紹如何實現乙個多執行緒的python爬蟲來提高抓取網頁的效率。很多人都說因為python的gil gil規定每個時刻只能有乙個執行緒訪問python虛擬機器 限制,不應該用多執行緒,而應該用...