iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1
AI & Data

蟲王養成 - scrapy系列 第 25

DAY 25 : scrapy facebook crawl (二)

  • 分享至 

  • xImage
  •  

先前發文
DAY 01 : 參賽目的與規劃
DAY 02 : python3 virtualenv 建置
DAY 03 : python3 request
DAY 04 : 使用beautifulsoup4 和lxml
DAY 05 : select 和find 抓取tag
DAY 06 : soup解析後 list取值
DAY 07 : request_header_cookie 通過網頁18限制
DAY 08 : ppt內文爬取
DAY 09 : 資料處理 split replace strip
DAY 10 : python csv 寫入 和dict 合併
DAY 11 : python class function
DAY 12 : crawl 框架 scrapy 使用
DAY 13 : scrapy 架構
DAY 14 : scrapy pipeline data insert mongodb
DAY 15 : scrapy middleware proxy
DAY 16 : scrapy selenium
DAY 17 : scrapy 爬取js畫面資料(二)
DAY 18 : scrapy splash 爬取js畫面資料(三)
DAY 19 : python .env 使用
DAY 20 : python chartify 資料視覺化套件
DAY 21 : python3 pandas 資料處理
DAY 22 : scrapy 資料應用apriori
DAY 23 : Datamining twitch data
DAY 24 : scrapy facebook crawl (一)
DAY 25 : scrapy facebook crawl (二)


今天就來爬一下每個文章的連結 , 由於select 及 find 還有一個是xpath抓取方式 , 下面的code 是從一位大神拿來改的

工商一下他的github , 那拿來改的原因是他的code 我的需求沒有用到這麼都的功能

有興趣的可以去看一下他的完整功能的專案

    def parse_page(self, response):
        soup = BeautifulSoup(response.text, 'lxml')
        # select all posts
        posts = response.xpath("//div[contains(@data-ft,'top_level_post_id')]")
        posts = set(posts)
        for post in posts:            
            new = ItemLoader(item=FbcrawlItem(),selector=post)
            #加入方法並使用寫在item裡的方法做資料處理
            # new.add_xpath('comments', "./div[2]/div[2]/a[1]/text()")
            post = post.xpath(".//a[contains(@href,'footer')]/@href").extract()#.getdata
            # new.add_value('url', "https://mbasic.facebook.com"+post[0])

            temp_post = response.urljoin(post[0])
            self.count -= 1

            # with open ('comment_urls.csv','a+') as f :
            #     f.write(str(temp_post)+'\n') 
            yield scrapy.Request(temp_post, self.parse_post)

        new_page = response.xpath("//div[2]/a[contains(@href,'timestart=') and not(contains(text(),'ent')) and not(contains(text(),number()))]/@href").extract()
        #換頁      
        if not new_page: 
            print('new_page tag is not find')
        else:
            print('next')
            new_page = response.urljoin(new_page[0])
            if 'flag' in response.meta:
                print('next page')
                yield scrapy.Request(new_page, callback=self.parse_page, meta={'flag':response.meta['flag']})
            else:
                yield scrapy.Request(new_page, callback=self.parse_page, meta={'flag':self.k})
                
    def parse_post(self,response):
        with open ('comment_urls.csv','a+') as f :
            f.write(str(response.url)+'\n') 


上一篇
DAY 24 : scrapy facebook crawl (一)
下一篇
DAY 26 : scrapy facebook crawl (三)
系列文
蟲王養成 - scrapy30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言