使用 python 抓取网页时出现问题

problems scraping web page using python

嗨,我是 python 的新手,我的老板让我抓取这些数据,但这不是我的强项,所以我想知道我将如何去做。

我查找的文本中的引号每隔几分钟也会更改一次,所以我也不确定如何找到它。

我目前正在使用 beautiful soup 和 Lxml,但是如果有更好的选择,我很乐意尝试它们

这是被检查的网页元素:

div class = "sometext"
<h3> somemoretext </h3>
<p>
<span class = "title" title="text i want">text i want</span>
<br>
</p>

我试过使用:

from lxml import html
import requests
from bs4 import BeautifulSoup
page = requests.get('the url')
soup = BeautifulSoup(page.text)
r = soup.findAll('//span[@class="title"]/text()')
print r

提前致谢,如有任何帮助,我们将不胜感激!

也许 find 是您真正需要的方法,因为您只需要寻找一个元素。 docs

r = soup.find('div', 'sometext').find('span','title')['title']

首先执行此操作以获得您在汤中看到的内容:

soup = BeautifulSoup(page)
print soup

这样你就可以仔细检查你实际处理的是你认为你正在处理的东西。

然后这样做:

r = soup.findAll('span', attrs={"class":"title"})
for span in r:
    print span.text

这将获取所有带有 class=titlespan 标签,然后 text 将打印出标签之间的所有文本。

编辑添加

请注意,esecules 的回答将使您在标签 内获得标题 (<span class = "title" title="text i want">),而我的答案将从文本中获得标题 (<span class = "title" >text i want</span> )

如果您熟悉 XPath 并且不需要 BeautifulSoup 特有的功能,那么仅使用 lxml 就足够了(或者甚至更好,因为 lxml 是已知更快):

from lxml import html
import requests

page = requests.get('the url')
root = html.fromstring(page.text)
r = root.xpath('//span[@class="title"]/text()')
print r