'SyntaxError: Non-UTF-8 code starting with '\xd8' in file

I use persian language site for crawling site and get data and text with lxml library with my python 3.4 code. At this point everything is good

text = "['هواداران استقلال از نخستین ساعات صبح امروز راهی ورزشگاه آزادی شدند.', 'به گزارش کاپ، در شرایطی که بازی امروز استقلال و الاهلی امارات از ساعت 20:15 در ورزشگاه آزادی آغاز می شود، در فاصله کمتر از 8 ساعت تا شروع مسابقه، تعدادی از هواداران آبی پوش مقابل درب غربی آزادی جمع شده اند.', 'البته درهای ورزشگاه آزادی هنوز باز نشده و بلیت فروشی نیز صورت نگرفته است.', 'بلیت فروشی بازی امروز به صورت حضوری انجام می شود و به همین دلیل استقلالی ها مجبور هستند برای استقرار در جای بهتر، زودتر در ورزشگاه حاضر شوند.', 'همچنین تعدادی از لیدرهای استقلال نیز صبح روز xa0بازی در حال ترمیم و تکمیل طرح موزاییکی خود بودند که دیروز به دلیل طوفان تهران تعدادی از قطعات آن کنده شده بود.']نیوکاسل توانست به لیگ برتر انگلیس صعود کند.به گزارش کاپ، دوشنبه شب نیوکاسل توانست پرستون نورث اند را با نتیجه 4 بر یک شکست داده و به لیگ برتر انگلیس صعود کند.به این ترتیب رافائل بنیتز فصل بعد در لیگ برتر جزیره فعالیت خواهد کرد."
#print2file(title, text, 14)
#u = unicode(text, "utf-8")
print(text)

Error:

SyntaxError: Non-UTF-8 code starting with '\xd8' in file D:/Users/Documents/PyCharm/WEB/Crawler-04.py on line 74, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Code



Solution 1:[1]

Finally solve my problem a bow code is correctly:

# # # # Import # # # #
from lxml import html
import requests
from time import sleep
import codecs

# # # #         # # # #

site    = "http://cup.ir/sport/latestarchive/0/page"
number  = 100

# # # #         # # # #

def crawl(starting_url):
    print("----- crawl -----")
    counter = 1
    page = 1
    start_page = requests.get(starting_url)
    tree = html.fromstring(start_page.text)
    #((page - 1) * counter) + counter )
    while ( (((page-1)*49) + counter) <= number ):
        if (counter >= 49 )&(counter % 49 ==0):
            #print("Error::No another link in page")
            page += 1
            link = starting_url + "/" + str(page)
            print(link)
            start_page = requests.get(link)
            tree = html.fromstring(start_page.text)
            print(tree)
            counter = 0
        link = "http://cup.ir" + tree.xpath('//li[@class ="clearfix"]/a/@href')[counter]
        get_news_from_link(link,(((page-1)*49) + counter))
        print((((page - 1) * 49) + counter), " :: ", link)
        sleep(0.75)
        counter += 1

def get_news_from_link(link,x):
    print("\n-------- get news from link ----------\n")
    page_link = requests.get(link)
    tree = html.fromstring(page_link.text)
    title = tree.xpath('//meta[@property="og:title"]/@content')[0]
    text = tree.xpath('//*/p/text()')[2:-2]
    print("Title: ",title)
    print("Text: ",text)
    print2file(title,text,x)


def print2file(title ,text ,counter):
    print("\n-------- print 2 file ----------\n")

    title = title + "\n"
    name_file = "news" + str(counter).zfill(4) + ".txt"
    file = codecs.open(name_file, "w", "utf-8")
    file.write(''.join(title))
    file.write(''.join(text))
    file.close()

def main():
    print("----- START -----")
    print("----- main -----")
    print("site: ",site)
    print("number: ", number)

    crawl(site)
    print("----- END -----")

if __name__ == "__main__":
    main()

Solution 2:[2]

put this line to the first line of your codes:

# This Python file uses the following encoding: utf-8

more information : www.python.org/dev/peps/pep-0263/#examples

Solution 3:[3]

put this line to the first line of your codes:

# -*- coding: utf-8 -*-

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Morteza M
Solution 2 Alireza Abdi
Solution 3 team meryb