使用python抓取网页的问题

时间:2015-12-08 22:21:23

标签: python web-scraping beautifulsoup lxml

嗨,我对python很新,我的老板要求我抓取这些数据,但这不是我的强项,所以我想知道我会怎么做。

我所追求的文字每隔几分钟也会在引号中发生变化,所以我也不确定如何找到它。

我现在正在使用美丽的汤和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

提前感谢您,任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

首先这样做是为了得到你在汤里看到的东西:

soup = BeautifulSoup(page)
print soup

通过这种方式,您可以仔细检查您实际上正在处理您认为自己正在处理的事情。

然后这样做:

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

这将获得带有span的所有class=title代码,然后text将打印出代码之间的所有文字。

已编辑添加

请注意,esecules的回答会在标记(<span class = "title" title="text i want">)中为您提供标题,而我的将从文本中获取标题(<span class = "title" >text i want</span>

答案 2 :(得分:0)

如果您熟悉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