通过Scrapy模拟Ajax请求 - 无法解码unicode响应

时间:2017-06-08 20:44:04

标签: python ajax python-3.x encoding scrapy

我在我的代码中成功地模拟了Ajax请求,这是我得到的确切响应的一部分(写入文件/打印到控制台)

  

\ u003ctr \ u003e \ u003ctd class = \" box_pro_high1 \" style = \" width:166px; height:302px; \" \ u003e \ r \ n \ u003cdiv align = \" center \" \ u003e \ r \ n \ u003cdiv style = \"宽度:160px;高度:100px;显示:table-cell; vertical-align:middle; text-align:center; \" \ u003e \ r \ n \ u003ca href = \&# 34; /天线连接器,配件/适配器的连接器/ SMA-RA-8906 / sma390-8153 / PD / \"相对= \" pd.aspx \ u0026amp; PID = 8153 \ u0026amp; FID = 8906 \ u0026amp; CID = WES1863229926N \ u0026amp; PCR = WES596880305N \ u0026amp;路径= hJhp9Eo4i4SmypehwrGDk1dSIV1a%2fzDdQ39QdmWB6NLz%2bOfhVWXfF%2buXHGazJfLb25nPLAnzP5cA1EMeQ6IUDQMZmGxNYGTr8ARSiPUbiPN8GaSYHamQH9%2bSCQaRu3yY8Nv8% 2fB75yy4UdDKkWwfIpY9zTNKSLx0anQ%2fNUrFOtGvph5cABhGlLBWHi%2fFJQEXw4​​P9%2bLdS%2fn1Q%3D \" class = \" tx_3 \" \ u003e \ r \ n \ r \ n \ u003cimg data-original = \" /prodimages/section7_th/sma390.jpg \"风格= \"最大高度:100像素;最大宽度:100像素; \"边界= \" 0 \" alt = \" SMA390 SMA R / A \"类= \"懒惰\" src = \" \" / \ u003e \ r \ n \ u003c / a \ u003e \ r \ n \ u003c / div \ u003e \ r \ n \ u003cdiv class = \" familyheader \ " style = \" height:30px; \" \ u003e \ r \ n \ r \ n \ u003ca href = \" / antennas-connectors-accessories / adapters-connectors / sma-ra- 8906 / sma390-8153 / PD / \"

我试图将它传递给BeautifulSoup / lxml,但它(可以理解)失败。

通过简单的谷歌搜索,我找到了这个网站:http://www.online-toolz.com/tools/text-unicode-entities-convertor.php

"解码" (我不确定它的正确用语)只需点击一下该字符串即可:

              

    <img data-original="/prodimages/section7_th/sma390.jpg" style="max-height:100px; max-width:100px;" border="0" alt="SMA390 SMA R/A"  class="lazy" src=""/>
  </a>
</div>
<div class="familyheader" style="height:30px;">

  <a href="/antennas-connectors-accessories/adaptors-connectors/sma-r-a-8906/sma390-8153/pd/" 

这正是我想要的。但是我不能在python中模仿这种行为。

我尝试过使用ord(),decode()等,但似乎无法解决它。

1 个答案:

答案 0 :(得分:1)

这是unicode转义字符串,你可以简单地把它变成可读的html:

s = "\u003ctr\u003e\u003c ......."
s = s.decode('unicode-escape')

现在,您可以将s字符串视为与beautifulsoup或scrapy选择器一起使用的正确答案。

for python3更简单

s = str.encode(s)