Python - проблема возникает, когда я пытаюсь получить документы с веб-сайта - PullRequest
0 голосов
/ 22 августа 2011

Я пытался загрузить документы с этой страницы Ценные бумаги Классификация действий

Я пытался загрузить 25 документов на странице.Я думал, что это просто, и вот мой код:

from BeautifulSoup import BeautifulSoup
import re
import urllib2
import os

if __name__ == "__main__":
  pre_url = "http://securities.stanford.edu"
  url = "http://securities.stanford.edu/fmi/xsl/SCACPUDB/recordlist.xsl?-db=SCACPUDB&-lay=Search&FIC_DateFiled_Quater=Q1&FIC_DateFiled_Year=2011&-sortfield.1=FIC_DateFiled&-sortfield.2=LitigationName&-sortorder.1=ascend&-max=25&-find" 
  response = urllib2.urlopen(url)
  soup = BeautifulSoup(response.read()).findAll('tr')
  url_list = []
  for s in soup[8:]:
    url_list.append(pre_url + s.a['href'])
  for x in url_list:
    name = x.split("/")[4]  
    context = urllib2.urlopen(x).read()
    soup = BeautifulSoup(context)
    file = open(name + ".txt", "w")
    file.write(soup.prettify())
  print "DONE"

После выполнения сценария я успешно загрузил 25 файлов.Но потом я обнаружил, что 10 из них полны мусорных персонажей!Как так?Кто-нибудь может мне помочь?

Большое спасибо, и я извиняюсь за мой плохой английский.

Обновление: это одна из страниц, которые неправильно загружаются скриптом http://securities.stanford.edu/1046/BWEN00_01/

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Пример страницы кодируется в UTF-16 без надлежащего указания этого фактоида в заголовке.

>>> page = urllib2.urlopen( "http://securities.stanford.edu/1046/BWEN00_01" )
>>> page.info().headers
['Date: Mon, 22 Aug 2011 13:13:56 GMT\r\n', 'Server: Apache/1.3.33 (Darwin) mod_jk/1.2.2 DAV/1.0.3\r\n', 'Cache-Control: max-age=60\r\n', 'Expires: Mon, 22 Aug 2011 13:14:56 GMT\r\n', 'Last-Modified: Thu, 21 Jul 2011 22:06:51 GMT\r\n', 'ETag: "18b9a6e-9af6-4e28a2fb"\r\n', 'Accept-Ranges: bytes\r\n', 'Content-Length: 39670\r\n', 'Connection: close\r\n', 'Content-Type: text/html\r\n']

Попробуйте page.decode('utf-16'), чтобы увидеть страницу в правильных символах Юникода вместо байтов.

0 голосов
/ 22 августа 2011
open(name + ".txt", "w")

Возможно, ваша проблема в том, что вы открываете файлы в текстовом режиме, но они загружаются в двоичном режиме.Замените вышеприведенное выражение на

open(name + ".txt", "wb")

и посмотрите, улучшится ли оно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...