【问题标题】:problems scraping web page using python使用python抓取网页的问题
【发布时间】:2016-03-14 00:56:45
【问题描述】:

嗨,我对 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

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

【问题讨论】:

  • 你有什么问题?
  • 你的预期输出是什么?
  • 对不起,我忘了提到我的输出似乎只是 [],因为没有文本,但是我想得到“我想要的文本”。干杯
  • 既然你说文字每隔几分钟就会改变一次,很可能是由一些JS脚本填充的。您可能需要检查您的浏览器网络检查器,因为您可能会找到该文本的专用 url。
  • @jonasmalacofilho 我将如何寻找专用网址以及如何打印?

标签: python web-scraping beautifulsoup lxml


【解决方案1】:

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

soup = BeautifulSoup(page)
print soup

这样你就可以仔细检查你实际上是在处理你认为你在处理的事情。

然后这样做:

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

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

编辑添加

请注意,esecules 的回答会在标签内获得标题(&lt;span class = "title" title="text i want"&gt;),而我的回答会从文本中获得标题(&lt;span class = "title" &gt;text i want&lt;/span&gt;

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-02-05
        • 1970-01-01
        • 2021-10-07
        • 2021-05-08
        • 1970-01-01
        • 2023-02-10
        • 2023-01-07
        • 2023-03-13
        相关资源
        最近更新 更多