私はどのように分を分けて他の人のWORDPRESSブログを採集しました

6685 ワード

本明細書のソースアドレス:https://blog.oliverxu.cn
 
最近私のブログが新しくオープンして、ずっとGoogle AdSenseを申請して、結局申請して一回拒絶されて、googleはメールを送って私の内容が少なすぎると言って、これは私をとても不快にさせて、拒絶された原因は他の例えばウェブサイトの建設時間が短いなどかもしれませんが、しかし私はまた瞬間的に私のブログの内容を増加したいと思って、もう一度見て、グループの中の基友はすべてwordpressが駅を建設して、OKで、小さい爬虫類を作りましょう!ネット上には自動的に文章を採集するプラグインがありますが、それはあまりにもlowだと思いませんか?(私の爬虫類もlowですが)よし、おしゃべりはやめて、テーマに入ります.

まず、目標のウェブサイトを確定する必要があります。私が登ったのはxxx大学のブログです。


Webサイトの分析


まず、私たちが登るサイトを見てみましょう.
この大学はすごいですね.世界ランキングは?lol:
爬虫類を実行するには:
  • すべての記事のエントリリンクとタイトル
  • を参照
  • 各記事から必要なコンテンツを抽出する
  • の記事のロールアップが終了すると、データベース
  • にデータが書き込まれます.
  • は、WPブログの
  • に公開する必要がある記事を自動的に公開します.

    始まりました、ARE YOU READY!


    まず、すべての文章のリンクを見つける必要があります.ページの法則を分析してみましょう.
    明らかに、xページ目は「www.vpsdx.com/page/' + x
    次は「やる」という字です.
    まず、クラスを定義し、データベース接続を初期化する必要があります.ここではmongodbを使っています.彼が簡単なので、私のような白に適しています.
    class crawl_blog():
        def __init__(self):
            client = MongoClient()
            db = client['vpsdx']#  
            self.blog_collection = db['blog']
            self.blog_title = ''
            self.blog_content = ''
            self.blog_url = ''
            self.all_blog_url = []
            self.all_blog_title = []
            self.old_img_urls = []
            self.new_img_urls = []
    

    その後、すべての記事のエントリリンクを取得し、分析ページにはBeautifulSoupを採用します.
    def get_blog_url(self):     # 
        for count in range(1, 100):
            page = 'http://www.vpsdx.com/page/' + str(count)
            page_response = requests.get(page,allow_redirects=False)
            print page_response.status_code
            if page_response.status_code != 200:
                print ' , 200'
                break
            else:
                soup = BeautifulSoup(page_response.content, 'html.parser')
                article = soup.find_all(name='article')
                for tag in article:
                    url = tag.find(name='a')
                    print url.get('href')
                    self.all_blog_url.append(url.get('href'))
                    print url.get('title')
                    self.all_blog_title.append(url.get('title'))
                    print ' '
            print count
        self.all_blog_url.reverse()
        self.all_blog_title.reverse()
    

    主な論理は、ここではあまり言わないで、簡単すぎます.
    def handle_one_page(self):      # 
        for article_url in self.all_blog_url:
            if self.blog_collection.find_one({' ': article_url}):
                print u' ' 
            else:
                index = self.all_blog_url.index(article_url)
                self.blog_url = article_url
                print " : {b8c66bcbce874cbcdfdaa03ff0f908635b9ef0379cd01189ad5fe3f67980b247}s" {b8c66bcbce874cbcdfdaa03ff0f908635b9ef0379cd01189ad5fe3f67980b247} self.blog_url
                self.blog_title = self.all_blog_title[index]
                print " : {b8c66bcbce874cbcdfdaa03ff0f908635b9ef0379cd01189ad5fe3f67980b247}s" {b8c66bcbce874cbcdfdaa03ff0f908635b9ef0379cd01189ad5fe3f67980b247} self.blog_title            
                self.get_article_content(self.blog_url)
                self.change_url()       # 
                self.blog_content = str(self.blog_content)
                self.publish_article(self.blog_title,self.blog_content)
                print ' '
                post = {
                            ' ': self.blog_title,
                            ' ': self.blog_url,
                            ' ': self.blog_content,
                            ' ': self.old_img_urls,
                            ' ': self.new_img_urls,
                            ' ': datetime.datetime.now()
                    }
                self.blog_collection.save(post)
                print u' ,  5s '
                time.sleep(5)
                self.blog_title = ''
                self.blog_content = ''
                self.blog_url = ''
                self.old_img_urls = []
                self.new_img_urls = []
    

    今、文章の内容をどのように抽出するかを分析して、私たちが必要とするラベルを見つけて、ラベルの中に私たちが望んでいない広告があることを発見して、そのため、私たちはそれを処理する必要があります.処理方法も簡単で、不要なtagを除去すればいいです.
    def get_article_content(self, url):
        self.blog_content = ''
        browser = webdriver.PhantomJS()
        browser.get(url)
        soup = BeautifulSoup(browser.page_source, 'html.parser')
        article_tag = soup.find('div', class_='entry')
        all_children_tag = article_tag.find_all(recursive=False)
        for i in all_children_tag:
            print i.name
    
            try:
                if i['class'][0] == u'gggpost-above':
                    i.decompose()  
                    print ' , '
                else:
                    pass
            except:
                pass
    
    
            try:
                if i['type']== u'text/javascript':
                    i.decompose()  
                    print ' , '
                else:
                    pass
            except:
                pass
    
    
            try:
                if i['class'][0] == u'old-message':
                    i.decompose()  
                    print ' , '
                else:
                    pass
            except:
                pass
    
            print 50*'*'
        print ' '
        self.blog_content = str(article_tag)
    

    次のステップも重要です.各文章には画像リンクがあり、基本的に多くのブログがCDN加速を使っています.ほとんどのCDNは防犯チェーンの設定を提供しています.だから、元のブログのリンクをそのまま使うと通じません.画像にアクセスするときはブラウザのreferを提供する必要がありますから.元の文章の画像をローカルにダウンロードし、自分が使用しているクラウドストレージにアップロードする必要があるすべての画像は、7牛クラウドを使用しています.
    def change_url(self):
            self.blog_content = BeautifulSoup(str(self.blog_content), 'html.parser')
            # class a 
            a_tag = self.blog_content.find_all(name='a', class_='highslide-image')
            print 50*'*'
            for a in a_tag:
                try:
                    # 
                    old_url = a['href']
                    response = requests.get(old_url)
                    index = a_tag.index(a)
                    filename = str(index) + '_' + old_url.split('/')[-1]
                    with open(filename, 'ab') as f:
                        f.write(response.content)   
                    self.old_img_urls.append(old_url)
                    new_tag = self.blog_content.new_tag("img")
                    a.replace_with(new_tag)
                    # 
                    self.up_load(filename, filename)
                    new_tag['src'] = ' ' + filename
                    print ' '
                    self.new_img_urls.append(new_tag['src'])
                except:
                    print ' , , '
    

    コードが醜いので、貼りません。皆さんの応援をお願いします。


    https://xujh.top/