【问题标题】:Crawl and extract multiple elements抓取和提取多个元素
【发布时间】:2018-08-08 12:39:18
【问题描述】:

我尝试从某个网站抓取信息,以从 YouTube 频道、所属国家和 URL 中获取多个名称的数据。现在可以抓取频道名称和网址的信息。我的目标是提取某个 YouTube 频道的国家/地区,但有时可能会丢失此信息。现在我可以提取每个频道的 URL 和频道名称,但我不知道如何提取标题的标题,例如:title="Romania"强>。我尝试使用正则表达式,但问题是 title 有时在标题中包含两次。以下代码演示了我当前的程序:

from bs4 import BeautifulSoup
import re
import requests

for i in range(1, 300):
    url = "https://www.channelcrawler.com/eng/results/136630/page:%s" % i
    req = requests.get(url)
    data = req.text
    soup = BeautifulSoup(data, "html.parser")

    for link in soup.find_all('h4'):
        #for t in link.find_all('title'):
        print(link)
        row = str(link)
        urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', row)
        print(urls)
        #print(link.text.strip())
        print(link.get_text())

Output:
<h4>
<a href="http://www.youtube.com/channel/UCWmSq95JfUZTv1-Jxmkk-Rw" target="_blank" title="Ford South Africa">Ford South Africa</a> </h4>
['http://www.youtube.com/channel/UCWmSq95JfUZTv1-Jxmkk-Rw']
...
<h4>
<a href="http://www.youtube.com/channel/UCyfWjPOye4zFvEC_MkbJZ4w" target="_blank" title="Nutz Rider">Nutz Rider</a> <img alt="" src="/img/flags/gif/ro.gif" title="Romania"/> </h4>
['http://www.youtube.com/channel/UCyfWjPOye4zFvEC_MkbJZ4w']

【问题讨论】:

    标签: python python-3.x beautifulsoup web-crawler


    【解决方案1】:

    试试这个..

    from bs4 import BeautifulSoup
    import re
    import requests
    
        for i in range(1, 300):
            url = "https://www.channelcrawler.com/eng/results/136630/page:%s" % i
            req = requests.get(url)
            data = req.text
            soup = BeautifulSoup(data, "html.parser")
    
            for link in soup.find_all('h4'):
                a = link.find('a')
                print(a['href'])
                print(a['title'])
                print(a.text)
                a = link.find('img')
                print(a['title'])
            break    
    

    你可以把国家放在方括号里,然后把东西放在try catch..希望这会有所帮助

    注意:插入中断用于测试

    【讨论】:

    • 嘿,我尝试了您的代码,但它只输出了两次频道名称而不是国家/地区。正如我所解释的,问题是国家没有特定的变量。 title 中存储了国家名称以及频道名称
    • @Daniel 嘿,那不是国家/地区名称,我在 youtube 上查过,有频道名称,他们是这样选择的
    • 如果您查看我的输出,您可以看到该国家/地区也被跟踪 title="Romania"
    • @Daniel 嘿,我更新了代码,现在我正在检查国家/地区的图片,因为图片是他们的国旗,我们可以从图片标题中获取国家/地区名称
    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 2021-01-26
    • 2020-08-15
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多