'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
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 |