抓取并提取多个元素

时间:2018-08-08 12:39:18

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

我尝试从某个网站抓取信息,以从YouTube频道,其所属国家和网址中获取多个名称的数据。现在,可以抓取频道名称和网址的信息。我的目标是提取特定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']

1 个答案:

答案 0 :(得分:3)

尝试一下。

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    

您可以将国家放在方括号中,然后将其放入尝试捕获中。希望这会有所帮助

注意:已插入中断以进行测试

相关问题