㈠ python爬蟲能幹什麼
python爬蟲就是模擬瀏覽器打開網頁,獲取網頁中想要的那部分數據。利用爬蟲我們可以抓取商品信息、評論及銷量數據;可以抓取房產買賣及租售信息;可以抓取各類職位信息等。
爬蟲:
網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。
(推薦教程:Python入門教程)
通俗的講就是通過程序去獲取web頁面上自己想要的數據,也就是自動抓取數據。
python爬蟲能做什麼?
從技術層面來說就是通過程序模擬瀏覽器請求站點的行為,把站點返回的HTML代碼/JSON數據/二進制數據(圖片、視頻) 爬到本地,進而提取自己需要的數據存放起來使用。
利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:
爬取知乎優質答案,為你篩選出各話題下最優質的內容。
抓取淘寶、京東商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。
抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。
爬取各類職位信息,分析各行業人才需求情況及薪資水平。
爬蟲的本質:
爬蟲的本質就是模擬瀏覽器打開網頁,獲取網頁中我們想要的那部分數據。
㈡ 怎樣用python抓取淘寶評論
#coding=utf-8
importurllib2
importsys
importjson
importre
#設置系統默認編碼為utf-8
reload(sys)
sys.setdefaultencoding("utf-8")
#Onlyforpython2
'''
只是簡單的示例,沒有檢查無評論的情況,其它異常也可能沒有檢查,
你可以根據自己的需要再對代碼修改
'''
#解析網頁數據
defparseData(html_data,reg_str):
pattern=re.compile(reg_str)
result=re.search(pattern,html_data)
ifresult:
returnresult.groups()
#commodity_url為商品詳情頁面
commodity_url="http://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-9140345655.2.y3LCj0&id=44454286657"
html_data=urllib2.urlopen(commodity_url).read()
#獲取用戶ID和商品ID
auction_msg=parseData(html_data,r'userNumId=(.*?)&auctionNumId=(.*?)&')
ifnotauction_msg:
print"Getreviewsfailed!"#獲取失敗,退出
sys.exit()
reviews_url="http://rate.taobao.com/feedRateList.htm?callback=jsonp_reviews_list¤tPageNum=1&rateType=&orderType=sort_weight&userNumId=%s&auctionNumId=%s"%auction_msg
response=urllib2.urlopen(reviews_url)
reviews_data=response.read().decode("gbk")
#獲取評論數據
json_str=parseData(reviews_data,r'((.*))')[0]
ifnotjson_str:
print"Getreviewsfailed!"#獲取失敗,退出
sys.exit()
jdata=json.loads(json_str)
#下面只列印了第一條評論,如需要列印所有,則遍歷jdata["comments"]即可
printjdata["comments"][0]["content"]
㈢ python爬蟲怎麼抓包
方案:
自己通過request庫手動編寫
使用python的爬蟲庫scrapy
最推薦的一種:使用python的爬蟲庫scrapy
推薦理由:
成熟度最高的框架,沒有之一
利用成熟產品,避免重復「造輪子」,可以更快速的構建項目
㈣ Python中怎麼用爬蟲爬
Python爬蟲可以爬取的東西有很多,Python爬蟲怎麼學?簡單的分析下:
如果你仔細觀察,就不難發現,懂爬蟲、學習爬蟲的人越來越多,一方面,互聯網可以獲取的數據越來越多,另一方面,像 Python這樣的編程語言提供越來越多的優秀工具,讓爬蟲變得簡單、容易上手。
利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:
知乎:爬取優質答案,為你篩選出各話題下最優質的內容。
淘寶、京東:抓取商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。
安居客、鏈家:抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。
拉勾網、智聯:爬取各類職位信息,分析各行業人才需求情況及薪資水平。
雪球網:抓取雪球高回報用戶的行為,對股票市場進行分析和預測。
爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如後台開發、web開發、科學計算等等,但爬蟲對於初學者而言更友好,原理簡單,幾行代碼就能實現基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。
掌握基本的爬蟲後,你再去學習Python數據分析、web開發甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。
對於小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通 Python,然後哼哧哼哧系統學習 Python 的每個知識點,很久之後發現仍然爬不了數據;有的人則認為先要掌握網頁的知識,遂開始 HTMLCSS,結果入了前端的坑,瘁……
但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從一開始就要有一個具體的目標。
在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。
1.學習 Python 包並實現基本的爬蟲過程
2.了解非結構化數據的存儲
3.學習scrapy,搭建工程化爬蟲
4.學習資料庫知識,應對大規模數據存儲與提取
5.掌握各種技巧,應對特殊網站的反爬措施
6.分布式爬蟲,實現大規模並發採集,提升效率
㈤ 如何利用python2.7實現網頁的抓包攔包改包功能有沒有範例
登陸其實就是將賬號密碼之類的POST到那個網站的伺服器。你可以通過抓包看到你點擊登陸時發的POST包。那麼你用python也模擬發一個一樣的包給伺服器,就實現了模擬登陸唄。
㈥ python3.2 下的抓包庫。。無論是pypcap還是scapy。貌似都沒有py3的版本。。跪求一個可以python3用
有一個py3kcap是pycap的封裝版本,可以用於python3版本。
給你一個使用的示例代碼:
#!/usr/bin/env python3.2
import ctypes,sys
from ctypes.util import find_library
#pcap = ctypes.cdll.LoadLibrary("libpcap.so")
pcap = None
if(find_library("libpcap") == None):
print("We are here!")
pcap = ctypes.cdll.LoadLibrary("libpcap.so")
else:
pcap = ctypes.cdll.LoadLibrary(find_library("libpcap"))
# required so we can access bpf_program->bf_insns
"""
struct bpf_program {
u_int bf_len;
struct bpf_insn *bf_insns;}
"""
class bpf_program(ctypes.Structure):
_fields_ = [("bf_len", ctypes.c_int),("bf_insns", ctypes.c_void_p)]
class sockaddr(ctypes.Structure):
_fields_=[("sa_family",ctypes.c_uint16),("sa_data",ctypes.c_char*14)]
class pcap_pkthdr(ctypes.Structure):
_fields_ = [("tv_sec", ctypes.c_long), ("tv_usec", ctypes.c_long), ("caplen", ctypes.c_uint), ("len", ctypes.c_uint)]
pkthdr = pcap_pkthdr()
program = bpf_program()
# prepare args
snaplen = ctypes.c_int(1500)
#buf = ctypes.c_char_p(filter)
optimize = ctypes.c_int(1)
mask = ctypes.c_uint()
net = ctypes.c_uint()
to_ms = ctypes.c_int(100000)
promisc = ctypes.c_int(1)
filter = bytes(str("port 80"), 'ascii')
buf = ctypes.c_char_p(filter)
errbuf = ctypes.create_string_buffer(256)
pcap_close = pcap.pcap_close
pcap_lookupdev = pcap.pcap_lookupdev
pcap_lookupdev.restype = ctypes.c_char_p
#pcap_lookupnet(dev, &net, &mask, errbuf)
pcap_lookupnet = pcap.pcap_lookupnet
#pcap_t *pcap_open_live(const char *device, int snaplen,int promisc, int to_ms,
#char *errbuf
pcap_open_live = pcap.pcap_open_live
#int pcap_compile(pcap_t *p, struct bpf_program *fp,const char *str, int optimize,
#bpf_u_int32 netmask)
pcap_compile = pcap.pcap_compile
#int pcap_setfilter(pcap_t *p, struct bpf_program *fp);
pcap_setfilter = pcap.pcap_setfilter
#const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);
pcap_next = pcap.pcap_next
# int pcap_compile_nopcap(int snaplen, int linktype, struct bpf_program *program,
# const char *buf, int optimize, bpf_u_int32 mask);
pcap_geterr = pcap.pcap_geterr
pcap_geterr.restype = ctypes.c_char_p
#check for default lookup device
dev = pcap_lookupdev(errbuf)
#override it for now ..
dev = bytes(str("wlan0"), 'ascii')
if(dev):
print("{0} is the default interface".format(dev))
else:
print("Was not able to find default interface")
if(pcap_lookupnet(dev,ctypes.byref(net),ctypes.byref(mask),errbuf) == -1):
print("Error could not get netmask for device {0}".format(errbuf))
sys.exit(0)
else:
print("Got Required netmask")
handle = pcap_open_live(dev,snaplen,promisc,to_ms,errbuf)
if(handle is False):
print("Error unable to open session : {0}".format(errbuf.value))
sys.exit(0)
else:
print("Pcap open live worked!")
if(pcap_compile(handle,ctypes.byref(program),buf,optimize,mask) == -1):
# this requires we call pcap_geterr() to get the error
err = pcap_geterr(handle)
print("Error could not compile bpf filter because {0}".format(err))
else:
print("Filter Compiled!")
if(pcap_setfilter(handle,ctypes.byref(program)) == -1):
print("Error couldn't install filter {0}".format(errbuf.value))
sys.exit(0)
else:
print("Filter installed!")
if(pcap_next(handle,ctypes.byref(pkthdr)) == -1):
err = pcap_geterr(handle)
print("ERROR pcap_next: {0}".format(err))
print("Got {0} bytes of data".format(pkthdr.len))
pcap_close(handle)