1. 程式人生 > >第一次寫,python爬蟲圖片,操作excel。

第一次寫,python爬蟲圖片,操作excel。

comment org ems exc strip() all 全局變量 習慣 生成

  第一次寫博客,其實老早就註冊博客園了,有寫博客的想法,就是沒有行動,總是學了忘,忘了丟,最後啥都沒有,電腦裏零零散散,東找找,西看看,今天認識到寫博客的重要性。

  最近閑著看了潭州教育的在線直播課程,頗受老師講課實用有感。只作為自己筆記學習,我們都知道學習一門編程都是先照抄,在創作。這裏完全按照老師講解,照抄作為學習。

一、Python抓取豆瓣妹子圖。

  工具:python3.6.0;bs4.6.0;xlwt(1.2.0)需要版本對應,之前就安裝了bs4但是運行的時候提示版本不對應。可以在線升級:pip install update buautifulsoup4

  1.pip list,可以查看本地安裝。

  技術分享

  1.爬取豆瓣妹子圖,知道其地址,url = ‘http://www.dbmeinv.com/?pager_offset=1‘。

  2.查看網頁源代碼,F12,network,隨便找個左邊捕捉的網頁信息,找到User-agent,目的主要是為了模仿瀏覽器登錄,防止反爬蟲。

技術分享

找到element元素。我們要的是img標簽,中的圖片信息,src連接下載地址。

技術分享

按照老師寫所有代碼

 1 import urllib
 2 import urllib.request
 3 from bs4 import BeautifulSoup
 4 url = http://www.dbmeinv.com/?pager_offset=1
5 x=0 6 #獲取源碼 7 #自定義函數 8 #User-Agent模擬瀏覽器進行訪問,反爬蟲 9 def crawl(url): 10 headers={User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3088.3 Safari/537.36} 11 req=urllib.request.Request(url,headers=headers)#創建對象 12 page=urllib.request.urlopen(req,timeout=20)#
設置超時 13 contents=page.read()#獲取源碼 14 #print (contents.decode()) 15 soup = BeautifulSoup(contents,html.parser)#html.parser主要是解析網頁的一種形式。 16 my_girl=soup.find_all(img)#找到所有img標簽 17 # 5.獲取圖片 18 for girl in my_girl:#遍歷 19 link=girl.get(src)#獲取src 20 print(link) 21 global x#全局變量 22 # 6.下載 urlretrieve 23 urllib.request.urlretrieve(link,image\%s.jpg%x)#下載,urlretrieve(需要下載的,路徑) 24 x+=1 25 print(正在下載第%s張%x) 26 #7.多頁 27 for page in range(1,10):#range本身自動生成整數序列,爬取多頁圖片。 28 #page+=1 29 url=http://www.dbmeinv.com/?pager_offset={}.format(page)# 30 #url = ‘http://www.dbmeinv.com/?pager_offset=%d‘ % page 31 crawl(url) 32 33 print(圖片下載完畢)

最終運行結果, 圖片保存在image文件夾下。

技術分享

二、抓取大眾點評,導入excel。趙本宣言老師源碼。

import requests
from bs4 import BeautifulSoup
import xlwt
def get_content(url,headers=None,proxy=None):
    html=requests.get(url,headers=headers).content
    return html

def get_url(html):
    soup = BeautifulSoup(html,html.parser)
    shop_url_list=soup.find_all(div,class_=tit)#class在Python是關鍵字,
    # 列表推導式
    return [i.find(a)[href] for i in shop_url_list]

#商品的詳細信息,名字,評論,人均
def get_detail_content(html):
    soup=BeautifulSoup(html,html.parser)
    price=soup.find(span,id=avgPriceTitle).text
    evaluation=soup.find(span,id=comment_score).find_all(span,class_=item)#find_all是有多個,這裏三個
    #for i in evaluation:
     #   print(i.text)
    the_star=soup.find(div,class_=brief-info).find(span)[title]
    title=soup.find(div,class_=breadcrumb).find(span).text
    comments=soup.find(span,id=reviewCount).text
    address=soup.find(span,itemprop=street-address).text
    print(u店名:+title)
    for i in evaluation:
        print(i.text)
    print(price)
    print(u評論數量:+comments)
    print(u地址:+address.strip())
    print(u評價星級:+the_star)
    print(================)
    return (title,evaluation[0].text,evaluation[1].text,evaluation[2].text,price,comments,address,the_star)

if __name__==__main__:
    items=[]
    start_url=https://www.dianping.com/search/category/344/10/
    base_url=https://www.dianping.com
    headers={
        User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3088.3 Safari/537.36,
        Cookie:_hc.v=461407bd-5a08-f3fa-742e-681a434748bf.1496365678; __utma=1.1522471392.1496365678.1496365678.1496365678.1; __utmc=1; __utmz=1.1496365678.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; PHOENIX_ID=0a0102b7-15c6659b548-25fc89; s_ViewType=10; JSESSIONID=E815A43E028078AFA73AF08D9C9E4A15; aburl=1; cy=344; cye=changsha; __mta=147134984.1496365814252.1496383356849.1496383925586.4
    }

    start_html=get_content(start_url)
    #一頁
    # url_list=get_url(start_html)
    #多頁
    url_list = [base_url + url for url in get_url(start_html)]
    for i in url_list:
        detail_html=get_content(i,headers=headers)
        item=get_detail_content(detail_html)
        items.append(item)

    #寫excel,txt差別,Excel:xlwg
    newTable=DZDP.xls
    wb=xlwt.Workbook(encoding=utf-8)
    ws=wb.add_sheet(test1)
    headData=[商戶名字,口味評分,環境評分,服務評分,人均價格,評論數量,地址,商戶評價]
    for colnum in range(0,8):
        ws.write(0,colnum,headData[colnum],xlwt.easyxf(font:bold on))
    index=1
    lens=len(items)
    for j in range(0,lens):
        for i in range(0,8):
            ws.write(index,i,items[j][i])
        index +=1
    wb.save(newTable)

很喜歡鎖女神老師,忘老師的用心講解,收獲很多,雖然有些地方還不是很懂,但通過不斷的學習,養成寫博客的習慣,相信會快速提升。

  

第一次寫,python爬蟲圖片,操作excel。