用bs4提取正确的数据?

时间:2015-09-21 19:11:19

标签: python encoding gettext bs4

这是我在这个网站上的第一个问题,因为我已经尝试了很多方法来获得我想要的但我没有成功.. 我尝试从类似于CraigList的法语网站中提取两种类型的数据。 我的需求很简单,我设法得到这些信息,但我的摘录中仍然有标签和其他标志。即使使用.encode(utf-8),我也有编码问题。

# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import csv

csvfile=open("test.csv", 'w+')

html=urlopen("http://www.leboncoin.fr/annonces/offres/ile_de_france/")

bsObj=BeautifulSoup(html)
article= bsObj.findAll("h2",{"class":"title"})
prix=bsObj.findAll("div",{"class":"price"})

for art in article:
    art=art.text.encode('utf-8')

print(article)

for prix1 in prix:
    prix1=prix1.text.encode('utf-8')
    print(prix1)

#Pour merger 2 listes (en deux colonnes, pas a la suite)
table_2=list(zip(article,prix))

try:
    writer=csv.writer(csvfile)
    writer.writerow(('Article', 'Prix'))

    for i in table_2:
        writer.writerow([i])

finally:
    csvfile.close()

运行此代码时:

  • 我的输出包含等等。虽然我已经运行:

文章中的艺术:         技术= art.text.encode( 'UTF-8')

  • 由于产品名称中的“€”或“ - ”符号,有时编码不起作用

我的问题是:

  • 为什么“.text.encode()”不会清除文章对象中的标记?
  • 为什么我仍然遇到编码问题?

我想我没有按预期使用该功能但是尽管我进行了测试但我没有得到结果..

提前感谢您的见解。

干杯

1 个答案:

答案 0 :(得分:0)

你可能已经意识到自己的错误。您正在压缩并输出# -*- coding: utf-8 -*- from urllib2 import urlopen from bs4 import BeautifulSoup import re import csv csvfile=open("test.csv", 'w+') html=urlopen("http://www.leboncoin.fr/annonces/offres/ile_de_france/") bsObj=BeautifulSoup(html, "html.parser") article= bsObj.findAll("h2",{"class":"title"}) prix=bsObj.findAll("div",{"class":"price"}) articles = [] for art in article: articles.append(art.text.encode('utf-8').strip()) print(art) prices = [] for prix1 in prix: prices.append(prix1.text.encode('utf-8').strip()) #Pour merger 2 listes (en deux colonnes, pas a la suite) table_2=list(zip(articles,prices)) try: writer=csv.writer(csvfile) writer.writerow(('Article', 'Prix')) for i in table_2: writer.writerow([i]) finally: csvfile.close() 而不是元素文本。我更正了以下代码:

epicDict = collections.defaultdict(set)
for word in uniqueWordList:
  for trigram in [word[x:x+3] for x in range(len(word)-2)]:
    epicDict[trigram].add(word)

下次尝试不用法语发表评论;)