用scrapy获取信息(Python)

时间:2013-03-04 20:11:42

标签: python web web-scraping scrapy

当我想要捕获以下信息时:

<td>But<200g/M2</td>


name = fila.select('.//td[2]/text()').extract()

我捕捉到以下内容

"But"

显然与这些字符“&lt; /”

存在冲突

2 个答案:

答案 0 :(得分:0)

使用'\'转义特殊字符,所以:

But\<200g\/M2

请注意,使用这些字符创建文件并不容易

答案 1 :(得分:0)

这是一种使用BeautifulSoup的方法,以防您在使用其他库时获得更多好运:

from bs4 import BeautifulSoup

soup = BeautifulSoup("""<html><head><title>StackOverflow-Question</title></head><body>
 <table>
  <tr>
   <td>Ifs</td>
   <td>Ands</td>
   <td>But<200g/M2</td>
  </tr>
 </table>
</body></html>""")

print soup.find_all('td')[2].get_text()

这个输出是:

But<200g/M2

如果您想使用XPath,您还可以使用The ElementTree XML API。在这里,我使用BeautifulSoup来获取HTML并将其转换为有效的XML,以便我可以针对它运行XPath查询:

from bs4 import BeautifulSoup
import xml.etree.ElementTree as ET

html = """<html><head><title>StackOverflow-Question</title></head><body>
 <table>
  <tr>
   <td>Ifs / Ands / Or</td>
   <td>But<200g/M2</td>
  </tr>
 </table>
</body></html>"""

soup = BeautifulSoup(html)

root = ET.fromstring(soup.prettify())

print root.findall('.//td[2]')[0].text

这个输出是一样的(注意HTML略有不同,这是因为XPath数组从1开始,而Python数组从0开始)。