Ⅰ 怎樣用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第三方庫requests抓取淘寶搜索結果頁面,response並不是html結構。。
您好,首先,sys.setdefaultencoding is evil。
其次,不會用 Requests 就去看文檔,不要亂來。
如果 Requests 檢測不到正確的編碼,那麼你告訴它正確的是什麼:
response.encoding = 'gbk'
print response.text
原始內容在 response.content 里,bytes,自己想怎麼處理就怎麼處理。
單個請求完全沒必要用 Session。直接 requests.get(xxx) 就可以了。
最後,弄不明白怎麼處理編碼錯誤的字元串就仔細想想,或者用 Python 3.x,不要散彈槍編程。
以下是 Python 3。Python 2 在那個字元串前加個 u 告訴它是 unicode 也一樣。
Ⅲ 淘寶12億條客戶信息遭爬取,黑客非法獲利34萬,客戶信息是如何泄露的
近些日子,一則“淘寶12億條客戶信息遭爬取,黑客非法獲利34萬”的問題,引發了廣大網友們的熱議,在網上鬧的沸沸揚揚。那麼,客戶的信息是如何泄漏的呢?這個黑客使用了python的爬蟲技術,爬出了淘寶的信息。然後這個黑客把這些拿到的信息,都拿去售賣給了其他需要這些信息的公司,各有所需。這些信息泄漏之後,輕則讓我們收到更多的垃圾信息和騷擾電話,重則被騙取錢財。那麼具體的情況是什麼呢?我來給大家分享一下我的看法。
一.黑客爬取信息這些黑客是通過python這個語言,利用了爬蟲的功能,爬取了淘寶的12億條客戶的信息。不得不說,這個黑客的技術也是確實很硬,能夠把淘寶這樣的大公司的信息給爬取出來。
以上就是我對於這個問題所發表的看法,純屬個人觀點,僅供參考。大家有什麼不同的看法都可以在評論區留言,大家一起討論一下。大家看完,記得點贊,加關注哦。
Ⅳ 如何爬蟲天貓店鋪數據python
本編博客是關於爬取天貓店鋪中指定店鋪的所有商品基礎信息的爬蟲,爬蟲運行只需要輸入相應店鋪的域名名稱即可,信息將以csv表格的形式保存,可以單店爬取也可以增加一個循環進行同時爬取。
源碼展示
首先還是完整代碼展示,後面會分解每個函數的意義。
# -*- coding: utf-8 -*-
import requests
import json
import csv
import random
import re
from datetime import datetime
import time
class TM_procs(object):
def __init__(self,storename):
self.storename = storename
self.url = ''.format(storename)
self.headers = {
"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 "
"(KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
}
datenum = datetime.now().strftime('%Y%m%d%H%M')
self.filename = '{}_{}.csv'.format(self.storename, datenum)
self.get_file()
def get_file(self):
'''創建一個含有標題的表格'''
title = ['item_id','price','quantity','sold','title','totalSoldQuantity','url','img']
with open(self.filename,'w',newline='') as f:
writer = csv.DictWriter(f,fieldnames=title)
writer.writeheader()
return
def get_totalpage(self):
'''提取總頁碼數'''
num = random.randint(83739921,87739530)
enrl = '/shop/shop_auction_search.do?sort=s&p=1&page_size=12&from=h5&ajson=1&_tm_source=tmallsearch&callback=jsonp_{}'
url = self.url + enrl.format(num)
html = requests.get(url,headers=self.headers).text
infos = re.findall('(({.*}))',html)[0]
infos = json.loads(infos)
totalpage = infos.get('total_page')
return int(totalpage)
def get_procts(self,page):
'''提取單頁商品列表'''
num = random.randint(83739921, 87739530)
enrl = '/shop/shop_auction_search.do?sort=s&p={}&page_size=12&from=h5&ajson=1&_tm_source=tmallsearch&callback=jsonp_{}'
url = self.url + enrl.format(page,num)
html = requests.get(url, headers=self.headers).text
infos = re.findall('(({.*}))', html)[0]
infos = json.loads(infos)
procts = infos.get('items')
title = ['item_id', 'price', 'quantity', 'sold', 'title', 'totalSoldQuantity', 'url', 'img']
with open(self.filename, 'a', newline='') as f:
writer = csv.DictWriter(f, fieldnames=title)
writer.writerows(procts)
def main(self):
'''循環爬取所有頁面寶貝'''
total_page = self.get_totalpage()
for i in range(1,total_page+1):
self.get_procts(i)
print('總計{}頁商品,已經提取第{}頁'.format(total_page,i))
time.sleep(1+random.random())
if __name__ == '__main__':
storename = 'uniqlo'
tm = TM_procs(storename)
tm.main()
上面代碼是選擇了優衣庫作為測試店鋪,直接輸入優衣庫店鋪的域名中關鍵詞即可,最終表格會按照店鋪名稱和時間名詞。
代碼解讀
導入庫說明
requests庫不用多數,爬取網頁的主要庫
json庫是用來解析 json 格式的數據的,也就是 Python 中的字典格式
csv庫是用來創建 csv 表格和保存信息的
random庫是用來生成一個隨機數的,這個代碼中用到了兩次,第一次是生成一個隨機數據去獲取最新的網頁信息而不是緩存信息,第二次是隨機一個時間,來減緩爬蟲速度
re庫是正則,主要用來提取信息
datetime和time都是時間庫,前者一般用來生成當前時間字元串,後者本爬蟲使用設置延遲時間
爬蟲思路
首先通過分析手機端天貓店鋪所有商品的網頁,可以發現每次下滑一頁都有一個 js 被載入,這個 js 的規律可以總結一下;
通過分析可以發現每次請求 js 都可以得到一個關鍵信息,那就是 total_page 這個參數,這也一想就能猜到,就是當前店鋪的總頁碼數,所以可以先取得這個數字,然後使用循環爬取全店商品;
每一頁有24個商品,而請求得到的是一個類似於 json 格式的網頁信息,但是並非是直接的 json,所以可以用正則表達式提取符合 json 格式的部分留用;
將每一頁的信息保存到 csv 表格中,可以直接使用 csv 庫的字典存儲方式,非常方便;
得到了單頁的信息,也得到了總頁碼數,只需要一個循環就可以爬取全店的商品了。
構造爬蟲類
上面代碼依次完成以下操作:
首先整個爬蟲是寫成了一個類,在初始化類的時候需要傳遞一個參數,這個參數就是店鋪的名稱。
然後構造出店鋪的所有商品頁面的前半部分,這部分都是不會變的
接著設置一個請求頭
按照當前時間生成一個以時間為依據的字元串,用來給文件命名,然後賦值給文件名稱,確定保存文件的名稱
最後一句是在類生成的時候就運行這個函數,及生成一個帶有標題的表格,後面會說道這個函數的具體含義
Ⅳ 如何用python寫一個爬蟲統計淘寶某件商品的銷量
如何寫?用python爬蟲!
源碼附上:
爬取淘寶銷量統計數據
Ⅵ python爬蟲怎麼獲取動態的網頁源碼
一個月前實習導師布置任務說通過網路爬蟲獲取深圳市氣象局發布的降雨數據,網頁如下:
心想,爬蟲不太難的,當年跟zjb爬煎蛋網無(mei)聊(zi)圖的時候,多麼清高。由於接受任務後的一個月考試加作業一大堆,導師也不催,自己也不急。
但是,導師等我一個月都得讓我來寫意味著這東西得有多難吧。。。今天打開一看的確是這樣。網站是基於Ajax寫的,數據動態獲取,所以無法通過下載源代碼然後解析獲得。
從某不良少年寫的抓取淘寶mm的例子中收到啟發,對於這樣的情況,一般可以同構自己搭建瀏覽器實現。phantomJs,CasperJS都是不錯的選擇。
導師的要求是獲取過去一年內深圳每個區每個站點每小時的降雨量,執行該操作需要通過如上圖中的歷史查詢實現,即通過一個時間來查詢,而這個時間存放在一個hidden類型的input標簽里,當然可以通過js語句將其改為text類型,然後執行send_keys之類的操作。然而,我失敗了。時間可以修改設置,可是結果如下圖。
為此,僅抓取實時數據。選取python的selenium,模擬搭建瀏覽器,模擬人為的點擊等操作實現數據生成和獲取。selenium的一大優點就是能獲取網頁渲染後的源代碼,即執行操作後的源代碼。普通的通過 url解析網頁的方式只能獲取給定的數據,不能實現與用戶之間的交互。selenium通過獲取渲染後的網頁源碼,並通過豐富的查找工具,個人認為最好用的就是find_element_by_xpath("xxx"),通過該方式查找到元素後可執行點擊、輸入等事件,進而向伺服器發出請求,獲取所需的數據。
[python]view plain
#coding=utf-8
fromtestStringimport*
fromseleniumimportwebdriver
importstring
importos
fromselenium.webdriver.common.keysimportKeys
importtime
importsys
default_encoding='utf-8'
ifsys.getdefaultencoding()!=default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
district_navs=['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']
district_names=['福田區','羅湖區','南山區','鹽田區','寶安區','龍崗區','光明新區','坪山新區','龍華新區','大鵬新區']
flag=1
while(flag>0):
driver=webdriver.Chrome()
driver.get("hianCe/")
#選擇降雨量
driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()
filename=time.strftime("%Y%m%d%H%M",time.localtime(time.time()))+'.txt'
#創建文件
output_file=open(filename,'w')
#選擇行政區
foriinrange(len(district_navs)):
driver.find_element_by_xpath("//div[@id='"+district_navs[i]+"']").click()
#printdriver.page_source
timeElem=driver.find_element_by_id("time_shikuang")
#輸出時間和站點名
output_file.write(timeElem.text+',')
output_file.write(district_names[i]+',')
elems=driver.find_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")
#輸出每個站點的數據,格式為:站點名,一小時降雨量,當日累積降雨量
foreleminelems:
output_file.write(AMonitorRecord(elem.get_attribute("title"))+',')
output_file.write(' ')
output_file.close()
driver.close()
time.sleep(3600)
[python]view plain
#Encoding=utf-8
defOnlyCharNum(s,oth=''):
s2=s.lower()
fomart=',.'
forcins2:
ifnotcinfomart:
s=s.replace(c,'')
returns
defAMonitorRecord(str):
str=str.split(":")
returnstr[0]+","+OnlyCharNum(str[1])
Ⅶ 如何用python抓取淘寶京東網頁所有審查元素,不是源代碼
審查元素顯示的其實就是格式化之後的源代碼,你可以用對比一下。
下面是一個Python3使用urllib庫讀取源代碼的例子,如果要處理成審查元素那樣的格式,需要對html標簽逐個處理下
importhttp.cookiejar
importurllib.request
ckjar=http.cookiejar.MozillaCookieJar()
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(ckjar))
res=opener.open("http://jd.com")
htm=res.read().decode('gbk')
print(htm)
Ⅷ Python爬蟲——淘寶商品信息定向爬蟲
步驟
Ⅸ python爬蟲求一個只用requests庫和beautifulsoup庫抓取淘寶目錄頁面內容的框架。。自己抓不出來。絕望。
淘寶的話有防採集,你要採集的話第一步要先模擬登錄,然後可以通過開發者工具獲取請求介面。
Ⅹ 怎麼使用python獲取淘寶數據
兩種方法:
網路爬蟲。使用urllib2和BeautifulSoup(或者正則表達式)去抓取網頁數據,大部分的網站都要這么做。
淘寶開放平台SDK。申請一個sdk用戶,然後調用API。支持python2.7以上版本。