【发布时间】:2016-08-15 03:10:55
【问题描述】:
对于我格式错误的帖子和编写的代码,第一次发帖,我们深表歉意!我确定这是一个简单的解决方法,但似乎无法解决。
问题 1:我正在为 Eve Online API 编写 XML 抓取器。我需要使用*BeautifulSoup* 迭代其中包含空格的HTML 标记(type id="X")。我想遍历 XML 中的 item ID 标签(本例中为 2)。我不确定*Data.iter* 是否是正确的方法。我知道 print Data.buy 会在 XML 中找到第一个购买标签并打印孩子,但找不到相同的方法让它打印第一个 Data.'type id="x"'。
问题 2:欢迎任何关于如何继续抓取过程的指导。我正在考虑将购买/出售/全部导出到某种存储(正在考虑 CSV 文件但不是肯定的),并为不同的项目 ID 和购买/出售订单提供不同的存储。
import requests #Used to service API connection
from lxml import html #Used to parse XML
from bs4 import BeautifulSoup #Used to read XML table on webpage
ItemTypeID1 = 34
ItemTypeID2 = 35
RegionID = 10000002
Webpage = requests.get('http://api.eve-central.com/api/marketstat?typeid=%i&typeid=%i®ionlimit=%i' % (ItemTypeID1, ItemTypeID2, RegionID))
#Check if page is up
if Webpage.status_code == 200:
#Convert webpage to %Data
Data = BeautifulSoup(Webpage.text, 'lxml')
#Problem line
for item in Data.iter('type id='):
print 'something'
http://api.eve-central.com/api/marketstat?typeid=34&typeid=35®ionlimit=10000002
<?xml version='1.0' encoding='utf-8'?>
<evec_api version="2.0" method="marketstat_xml">
<marketstat><type id="34">
<buy><volume>21648183554</volume><avg>5.34</avg><max>5.78</max><min>2.00</min><stddev>0.83</stddev><median>5.52</median><percentile>5.58</percentile></buy>
<sell><volume>15987043271</volume><avg>6.20</avg><max>15.00</max><min>5.58</min><stddev>1.38</stddev><median>6.00</median><percentile>5.85</percentile></sell>
<all><volume>37635226825</volume><avg>5.71</avg><max>15.00</max><min>2.00</min><stddev>1.40</stddev><median>5.54</median><percentile>4.16</percentile></all>
</type><type id="35">
<buy><volume>4163954948</volume><avg>7.26</avg><max>9.39</max><min>4.02</min><stddev>1.60</stddev><median>6.48</median><percentile>9.24</percentile></buy>
<sell><volume>10154431073</volume><avg>11.84</avg><max>17.41</max><min>9.00</min><stddev>1.80</stddev><median>10.59</median><percentile>9.46</percentile></sell>
<all><volume>14318386021</volume><avg>10.51</avg><max>17.41</max><min>4.02</min><stddev>2.21</stddev><median>10.00</median><percentile>5.87</percentile></all>
</type></marketstat>
</evec_api>
【问题讨论】:
-
你为什么要导入 lxml 然后不使用它? bs4 使用 lxml 作为解析器,所以我不知道你为什么使用 bs4
-
先生,这是我的第一个 python 项目,我要进行很多谷歌搜索、阅读、学习等。我在网上看到了一个使用 BS4 的示例,所以这就是我所知道的,你知道吗?像这样张贴这样的地方让其他程序员让我了解我无法谷歌的东西 - 你不知道你不知道什么,而且我不知道我可以完全跳过 BS4!
-
lxml.html 用于解析 html 或者实际上是 lxml,lxml.etree 用于 xml。 Bs4 非常用户友好并且是一个很棒的库,但是 lxml 有完整的 xpath 1.0 和几乎如果不是所有的 css3 选择器packages.python.org/cssselect/#supported-selectors。
标签: python xml beautifulsoup lxml