使用 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=title
的 span
标签,然后 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
嗨,我是 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=title
的 span
标签,然后 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