搜尋

首頁  >  問答  >  主體

python菜鸟 想做一个简单的爬虫 求教程

python菜鸟 想做一个简单的爬虫 求教程 ps:一般公司做爬虫采集的话常用什么语言

PHP中文网PHP中文网2803 天前1354

全部回覆(21)我來回復

  • PHP中文网

    PHP中文网2017-04-17 14:29:26

    • 爬內容,通常來說就是HTTP請求,requests +1
    • 爬下來的網頁就是做一些字串處理,取得你要的資訊。 beautifulsoup、正規表示式、str.find()都可以

    一般網頁以上兩點就可以了,對於ajax請求的網站,你可能爬不到想要內容,去找他的Api可能更方便。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 14:29:26

    以前學習的時候整理的一份教學:

    Python 爬蟲教學

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 14:29:26

    直接給題主貼一個可以使用的抓取腳本吧,目的是獲取豆瓣正在上映影片的豆瓣id和影片標題,腳本依賴於beautifulsoup庫,需要安裝,beautifulsoup中文文件

    補充:如果題主是希望建立一個能對網站進行抓取或可以自訂抓取指定頁面這類真正的爬蟲程式的話,還是推薦題主研究 scrapy

    抓取python範例程式碼:

    #!/usr/bin/env python
    #coding:UTF-8
    
    import urllib
    import urllib2
    import traceback
    
    from bs4 import BeautifulSoup
    from lxml import etree as ET
    
    def fetchNowPlayingDouBanInfo():
        doubaninfolist = []
    
        try:
            #使用proxy时,请取消屏蔽
    #         proxy_handler = urllib2.ProxyHandler({"http" : '172.23.155.73:8080'})
    #         opener = urllib2.build_opener(proxy_handler)
    #         urllib2.install_opener(opener)      
    
            url = "http://movie.douban.com/nowplaying/beijing/"
    
            #设置http-useragent
            useragent = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36'}
            req = urllib2.Request(url, headers=useragent)    
    
            page = urllib2.urlopen(req, timeout=10)
            html_doc = page.read()
    
            soup = BeautifulSoup(html_doc, "lxml")
    
            try:
    
                nowplaying_ul = soup.find("p", id="nowplaying").find("ul", class_="lists")
    
                lilist = nowplaying_ul.find_all("li", class_="list-item")
                for li in lilist:
                    doubanid = li["id"]
                    title = li["data-title"]
    
                    doubaninfolist.append({"douban_id" : doubanid, "title" : title, "coverinfolist" : [] })
    
            except TypeError, e:
                print('(%s)TypeError: %s.!' % (url, traceback.format_exc()))
            except Exception:
                print('(%s)generic exception: %s.' % (url, traceback.format_exc()))
    
        except urllib2.HTTPError, e:
            print('(%s)http request error code - %s.' % (url, e.code))
        except urllib2.URLError, e:
            print('(%s)http request error reason - %s.' % (url, e.reason))
        except Exception:
            print('(%s)http request generic exception: %s.' % (url, traceback.format_exc()))
    
        return doubaninfolist
    
    if __name__ =="__main__":
       doubaninfolist = fetchNowPlayingDouBanInfo()
       print doubaninfolist
    

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:29:26

    簡單的,不用框架的,可以看看requests和beautifulsoup這兩個庫,如果熟悉python語法,看完這兩個,差不多能寫個簡單的爬蟲了。


    一般公司會搞爬蟲,我看過的,多用java或python。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 14:29:26

    百度搜尋python + 爬蟲

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 14:29:26

    簡單的爬蟲,其實框架最簡單了,看看網路上的入門貼
    推薦scrapy

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 14:29:26

    網終上確實有許多的關於Python如何寫一個簡單爬蟲的文章,但這些文章大多只能算是一個例子,能真正應用的還是挺少的。爬蟲我認為就是取得內容、分析內容、再儲存就OK了,如果只是才接觸的話,可以直接Google之就行了。如果是深入的研究的話,可以在Github上找找程式碼來看下。

    我自己對於Python也只是一知半解,希望能有所幫助。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:29:26

    可以看看我的資料scrapy

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 14:29:26

    scrapy 節約你大量時間
    github上有很多例子

    回覆
    0
  • 迷茫

    迷茫2017-04-17 14:29:26

    貼一段爬天貓的代碼:

    def areaFlow(self, parturl, tablename, date):
            while True:
                url = parturl + self.lzSession + '&days=' + str(date) + '..' + str(date)
                print url
                try:
                    html = urllib2.urlopen(url, timeout=30)
                except Exception, ex:
                    writelog(str(ex))
                    writelog(str(traceback.format_exc()))
                    break;
                responegbk = html.read()
                try:
                    respone = responegbk.encode('utf8')
                except Exception, ex:
                    writelog(str(ex))
                # 如果lzSession过期则会返回errcode:500的错误
                if respone.find('"errcode":500') != -1:
                    print 'nodata'
                    break;
                # 如果时间不对则返回errcode:100的错误
                elif respone.find('"errcode":100') != -1:
                    print 'login error'
                    self.catchLzsession()
                else:
                    try:
                        resstr = re.findall(r'(?<=\<)(.*?)(?=\/>)', respone, re.S)
                        writelog('地域名称    浏览量    访问量')
                        dictitems = []
                        for iarea in resstr:
                            items = {}
                            areaname = re.findall(r'(?<=name=\\")(.*?)(?=\\")', iarea, re.S)
                            flowamount = re.findall(r'(?<=浏览量:)(.*?)(?=&lt)', iarea, re.S)
                            visitoramount = re.findall(r'(?<=访客数:)(.*?)(?=\\")', iarea, re.S)
                            print '%s %s %s' % (areaname[0], flowamount[0], visitoramount[0])
                            items['l_date'] = str(self.nowDate)
                            items['vc_area_name'] = str(areaname[0])
                            items['i_flow_amount'] = str(flowamount[0].replace(',', ''))
                            items['i_visitor_amount'] = str(visitoramount[0].replace(',', ''))
                            items['l_catch_datetime'] = str(self.nowTime)
                            dictitems.append(items)
                        writeInfoLog(dictitems)
                        insertSqlite(self.sqlite, tablename, dictitems)
                        break
                    except Exception,ex:
                        writelog(str(ex))
                        writelog(str(traceback.format_exc()))
                time.sleep(1)
    

    回覆
    0
  • 取消回覆