国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python+mongodb數據抓取詳細介紹

2020-01-04 16:39:22
字體:
來源:轉載
供稿:網友

分享點干貨!!!

Python數據抓取分析

編程模塊:requests,lxml,pymongo,time,BeautifulSoup

首先獲取所有產品的分類網址:

def step():  try:    headers = {      。。。。。      }    r = requests.get(url,headers,timeout=30)    html = r.content    soup = BeautifulSoup(html,"lxml")    url = soup.find_all(正則表達式)    for i in url:      url2 = i.find_all('a')      for j in url2:         step1url =url + j['href']         print step1url         step2(step1url)  except Exception,e:    print e

我們在產品分類的同時需要確定我們所訪問的地址是產品還是又一個分類的產品地址(所以需要判斷我們訪問的地址是否含有if判斷標志):

def step2(step1url):  try:    headers = {      。。。。      }    r = requests.get(step1url,headers,timeout=30)    html = r.content    soup = BeautifulSoup(html,"lxml")    a = soup.find('div',id='divTbl')    if a:      url = soup.find_all('td',class_='S-ITabs')      for i in url:        classifyurl = i.find_all('a')        for j in classifyurl:           step2url = url + j['href']           #print step2url           step3(step2url)    else:      postdata(step1url)

當我們if判斷后為真則將第二頁的分類網址獲取到(第一個步驟),否則執行postdata函數,將網頁產品地址抓取!

def producturl(url):  try:    p1url = doc.xpath(正則表達式)    for i in xrange(1,len(p1url) + 1):      p2url = doc.xpath(正則表達式)      if len(p2url) > 0:        producturl = url + p2url[0].get('href')        count = db[table].find({'url':producturl}).count()        if count <= 0:            sn = getNewsn()            db[table].insert({"sn":sn,"url":producturl})            print str(sn) + 'inserted successfully'        else:            'url exist'  except Exception,e:    print e

其中為我們所獲取到的產品地址并存入mongodb中,sn作為地址的新id。

下面我們需要在mongodb中通過新id索引來獲取我們的網址并進行訪問,對產品進行數據分析并抓取,將數據更新進數據庫內!

其中用到最多的BeautifulSoup這個模塊,但是對于存在于js的價值數據使用BeautifulSoup就用起來很吃力,所以對于js中的數據我推薦使用xpath,但是解析網頁就需要用到HTML.document_fromstring(url)方法來解析網頁。

對于xpath抓取價值數據的同時一定要細心!如果想了解xpath就在下面留言,我會盡快回答!

def parser(sn,url):  try:    headers = {      。。。。。。      }    r = requests.get(url, headers=headers,timeout=30)    html = r.content    soup = BeautifulSoup(html,"lxml")    dt = {}    #partno    a = soup.find("meta",itemprop="mpn")    if a:      dt['partno'] = a['content']    #manufacturer    b = soup.find("meta",itemprop="manufacturer")    if b:      dt['manufacturer'] = b['content']    #description    c = soup.find("span",itemprop="description")    if c:      dt['description'] = c.get_text().strip()    #price    price = soup.find("table",class_="table table-condensed occalc_pa_table")    if price:      cost = {}      for i in price.find_all('tr'):        if len(i) > 1:          td = i.find_all('td')          key=td[0].get_text().strip().replace(',','')          val=td[1].get_text().replace(u'/u20ac','').strip()          if key and val:            cost[key] = val      if cost:        dt['cost'] = cost        dt['currency'] = 'EUR'    #quantity    d = soup.find("input",id="ItemQuantity")    if d:      dt['quantity'] = d['value']    #specs    e = soup.find("div",class_="row parameter-container")    if e:      key1 = []      val1= []      for k in e.find_all('dt'):        key = k.get_text().strip().strip('.')        if key:          key1.append(key)      for i in e.find_all('dd'):        val = i.get_text().strip()        if val:          val1.append(val)      specs = dict(zip(key1,val1))    if specs:      dt['specs'] = specs      print dt          if dt:      db[table].update({'sn':sn},{'$set':dt})      print str(sn) + ' insert successfully'      time.sleep(3)    else:      error(str(sn) + '/t' + url)  except Exception,e:    error(str(sn) + '/t' + url)    print "Don't data!"

最后全部程序運行,將價值數據分析處理并存入數據庫中!

以上就是本文關于python/271188.html">python+mongodb數據抓取詳細介紹的全部內容,希望對大家有所幫助。有什么問題,歡迎留言一起交流討論。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安图县| 玉树县| 东城区| 靖安县| 泰宁县| 临海市| 三穗县| 台安县| 大足县| 婺源县| 贺州市| 和田县| 阿尔山市| 唐海县| 云和县| 治县。| 潮州市| 南江县| 大方县| 澄江县| 云霄县| 兴城市| 临安市| 西宁市| 烟台市| 和平区| 郓城县| 二手房| 睢宁县| 高淳县| 始兴县| 石屏县| 天门市| 都匀市| 齐齐哈尔市| 泽库县| 读书| 梅河口市| 城步| 余姚市| 乌审旗|