Python爬蟲初探

2021-09-24 10:44:18 字數 3577 閱讀 3275

以下功能均在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虛擬機器 限制,不應該用多執行緒,而應該用...