如何在python

时间:2017-08-11 17:21:24

标签: python beautifulsoup web-crawler

我在提取中文文本并将其写入文件时遇到了麻烦。

str = "全球紧张致富豪财富缩水 贝索斯丁磊分列跌幅前两位";
f=open('test.txt','w');
f.write(str);

上面的代码运行正常。在下面的代码中写入文件显示乱码。

import requests;
from bs4 import BeautifulSoup

f=open('data.txt','w');

def techSinaCrawler():
    url="http://tech.sina.com.cn/"
    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, "html.parser")
    for li in soup.findAll('li',{'data-sudaclick': 'yaowenlist-1'}):
        for link in li.findAll('a'):
            href = link.get('href')
            techSinaInsideLinkCrawler(href);            

def techSinaInsideLinkCrawler(url):

    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, "html.parser")
    for data in soup.findAll('h1',{'id': 'main_title'}):
        str='main_title'+':'+ data.string
        f.write(str);
        f.write('\n');

techSinaCrawler();

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

在Python 2中,如果您正在处理ASCII以外的编码,那么使用codecs.open()是一个好主意。这样,您就不需要手动编码您编写的所有内容。此外,如果您希望文件名中包含非ASCII字符,则应将os.walk()传递给Unicode字符串:

import codecs
with codecs.open("c:/Users/me/filename.txt", "a", encoding="utf-8") as d:
   for dir, subdirs, files in os.walk(u"c:/temp"):
      for f in files:
         fname = os.path.join(dir, f)
         print fname
         d.write(fname + "\n")

无需调用d.close(),with块已经解决了这个问题。

答案 1 :(得分:0)

解决了..

刚刚将.text更改为.content

plain_text = source_code.text to plain_text = source_code.content

将输出作为中文文本。

获得了理想的结果