python的美丽汤模块给出了错误

时间:2018-06-04 22:56:43

标签: python web-scraping

我正在使用以下代码尝试进行网页抓取。

import sys , os
import requests, webbrowser,bs4
from PIL import Image
import pyautogui

p = requests.get('http://www.goal.com/en-ie/news/ozil-agent-eviscerates-jealous-keown-over-stupid-comments/1javhtwzz72q113dnonn24mnr1')

n = open("exml.txt" , 'wb')
for i in p.iter_content(1000) :
    n.write(i)

n.close()
n = open("exml.txt" , 'r')

soupy= bs4.BeautifulSoup(n,"html.parser")


elems = soupy.select('img[src]')

for u in elems :
    print (u)

所以我打算做的是提取从页面获得的xml响应中的所有图像链接。 (请纠正我如果我认为requests.get返回输入网址时打开的网页的整个静态html文件我错了)

然而在线:

 soupy= bs4.BeautifulSoup(n,"html.parser")

我收到以下错误:

Traceback (most recent call last):
  File "../../perl/webscratcher.txt", line 24, in <module>
    soupy= bs4.BeautifulSoup(n,"html.parser")
  File "C:\Users\Kanishc\AppData\Local\Programs\Python\Python36-32\lib\site-packages\bs4\__init__.py", line 191, in __init__
    markup = markup.read()
  File "C:\Users\Kanishc\AppData\Local\Programs\Python\Python36-32\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 24662: character maps to <undefined>

我对错误以​​及&#34; Appdata&#34;无能为力。文件夹是空的。

如何进一步处理?

发布尝试建议:

我将文件名的扩展名更改为py,并删除了此错误。但是在以下一行:

soupy = bs4.BeautifulSoup(n,&#34; lxml&#34;)我收到以下错误:

追踪(最近一次通话):   文件&#34; C:\ perl \ webscratcher.py&#34;,第23行,in     soupy = bs4.BeautifulSoup(p,&#34; lxml&#34;)   文件&#34; C:\ Users \ PREMRAJ \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ bs4__init __。py&#34;,第192行, init     elif len(标记)&lt; = 256和( TypeError:类型&#39;响应&#39;的对象没有len()

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你的事情过于复杂。将Response对象的字节内容直接传递给BeautifulSoup对象的构造函数,而不是将其写入文件。

var globalResizeTimeout;
function debounce(fn, wait) {
  clearTimeout(globalResizeTimeout);
  globalResizeTimeout = setTimeout(function () {
    fn.apply(this, arguments)
  }, (wait || 1));
}

答案 1 :(得分:0)

好的,你可能想对使用BeautifulSoup进行评论。我引用了我的一个旧项目,这就是打印它们所需要的。选中BS documents,使用select方法找到所需的确切语法。

这将打印来自html的所有img标签

--- Html ---
<div id=div>
  <img class=img1 src=http://icons.iconarchive.com/icons/graphicloads/100-flat/256/home-icon.png>
  <img class=img2 src=https://pt.seaicons.com/wp-content/uploads/2015/07/Mushroom-1UP-icon.png>
</div>

--- CSS ---
#div{
  background:black;
  width:100%;
  height:200px;
  transition: background 2.3s linear;
  position: relative;
}
#div img{
  position: absolute;
  top: 0;
  left: 0;
  transition: all 2.3s linear;
}
.img2{opacity: 0;}

--- JS ---
$(function(){
  $("#div").mouseover(function(){
    var $p = $("#div");
    $p.css("background-color","yellow");
    $(".img1").css("opacity", 0);
    $(".img2").css("opacity", 1);
  });
});