言歸正傳,說說我的這次返利網的爬蟲經歷^\/^
返利網的「今日值得買」版塊每天都有資料更新,而且匯集了各大電商**,包括**、京東、易迅等**的**打折商品,所以能在這裡有點資料的積累,做乙個文字資料探勘,可能會發現一些價值。
首先看一下「今日值得買」版塊的首頁,能不能找到什麼規律
你發現了嗎?反正我沒有。。。不過碰巧開啟了「今日值得買」的第二頁商品資訊,結果奇蹟出現了,url改變了!!!**竟然變成了zhide.fanli.com/p2,這就讓人覺得有意思了,通過男人的第六感,我深深地感受到這url中存在規律。
然後我開啟了「今日值得買」的第一頁資訊,看看這頁的url是什麼?!果真,和猜想的一樣,是zhide.fanli.com/p1,那就問題很可能就解決了
試試zhide.fanli.com/p3如果能開啟第三頁資訊,那麼問題解決了:url的變化就是p後面數字的變化。驗證一下,猜想正確!!
所以想辦法獲取這些隨機數,也就是商品的編號,問題可能會解決。起初我是隨機生成url的後三位數字,發現有些**能進,有些不能進,還有好多不是今天更新的資料;所以我就想到了能不能通過遍歷「今日值得買」的每一頁的資訊,獲取商品的編號,從而訪問商品的鏈結資訊呢?!經過實踐肯定了我的想法。。。
上**!!!
#coding=utf-8
import
sysreload(sys)
sys.setdefaultencoding(
"utf-8")
import
urllib2
import
refrom bs4 import
beautifulsoup
import
time
import
socket
#返利網ip為fanly_url
fanly_path="
f:\yaozhi\yaozhi.txt
"fanly_url="
"format_url="
"reg=r'
data-id="\d"
'reg2=r"\d"
reg3='
"lowest-network"
'reg4=r'
<.+?>
'result=re.compile(reg)
class
faly():
def__init__
(self):
#初始化標頭檔案 'user-agent'
self.user_agent='
mozilla/5.0 (windows nt 6.1; wow64; rv:41.0) gecko/20100101 firefox/41.0
'self.html_data=
def get_html(self,start_page=1,end_page=20):
if start_page<1:
return
"頁碼輸入錯誤
"elif end_page>100:
return
"頁碼超出範圍,請輸入1-100的整數!
"for i in range(start_page,end_page+1):
print("
----正在採集%d頁的資料----
"%i)
rt=urllib2.request(fanly_url+str(i))
rt.add_header(
'user-agent
',self.user_agent)
#網路連線可能會出現問題,存在ip被封的風險,得到需要採集的網頁的html
try:
my_data =urllib2.urlopen(rt).read()
time.sleep(2)
socket.setdefaulttimeout(15)
except
urllib2.urlerror, e:
if hasattr(e,'
reason'):
print u"
連線失敗
",e.reason
return
str(self.html_data)
#print(faly().get_html())
class
getdata():
def__init__
(self):
self.html=faly().get_html()
self.href=
self.ls=
self.url=
#通過獲取href的值,得到實際需要訪問的**,**變化的只是後面的數字,用正規表示式匹配,然後進行去重
defget_hrefurl(self):
tag=result.findall(self.html)
for i in
tag:
result2=re.findall(reg2,str(self.href))
iflen(result2):
for data in
result2:
if data not
inself.ls:
url=format_url+str(data)
return
self.url
#print getdata().get_hrefurl()
#獲取商品的具體資訊,包括打折商品**、商品**、簡介等資訊
class
href_mg():
def__init__
(self):
self.list=getdata().get_hrefurl()
self.txt_list=
defshow_mg(self):
for item in
range(len(self.list)):
iflen(self.list):
url=str(self.list[item])
mg=urllib2.request(url)
try:
req=urllib2.urlopen(mg).read()
soup=beautifulsoup(req,"
html.parser")
txt=soup.find_all('h1'
)
except
urllib2.urlerror,e:
e.reason
return str(self.txt_list).decode("
unicode_escape")
#print href_mg().show_mg()
if__name__ == "
__main__":
#提取文件,規整資料,寫入本地
with open(fanly_path,'a'
) as file:
data=href_mg().show_mg()
data_s=re.sub(reg4,'
',data).replace('
全網最低
','').replace('
[','').replace('
]','').replace('
,','
\n').strip().replace('
',''
) file.write(str(data_s))
Python爬取散文網散文
配置python 2.7 bs4 requests 安裝 用pip進行安裝 sudo pip install bs4 sudo pip install requests 簡要說明一下bs4的使用因為是爬取網頁 所以就介紹find 跟find all find跟find all的不同在於返回的東西不同...
python爬取奇趣網小說
在爬蟲爬取的過程中,需要判斷傳入的鏈結對應的是靜態網頁還是動態網頁,然後選擇不同的 對其進行爬取 因為靜態爬取比較快,所以當網頁為靜態網頁時就不需要呼叫動態爬取的 了,from bs4 import beautifulsoup,unicodedammit from urllib.request im...
Python爬取海安網所有號碼
注 1.本程式採用ms sql server資料庫,請執行前手動修改程式開始處的資料庫連線資訊。2.需要pyodbc庫的支援 import requests,re,sys from bs4 import beautifulsoup import pyodbc pages set conn pyodb...