我只想从字符串中打印所有以“ / watch”开头的“单词”,然后将所有“ / watch ...”添加到列表中。预先感谢!
# Take a random video from my youtube recommended and add it to watch2gether
import requests
from bs4 import BeautifulSoup as BS
import time
import random
# Importing libraries
num = random.randint(1, 20)
recommended = requests.get('https://www.youtube.com/results?search_query=svenska+youtube+klassiker&sp=EgIQAQ%253D%253D')
recommended_soup = BS(recommended.content, features='lxml')
recommended_vid = recommended_soup.find_all('a', href=True)
for links in recommended_vid:
print(links['href'])
输出:
/
//www.youtube.com/upload
/
/feed/trending
/feed/history
/premium
/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ
/channel/UCEgdi0XIXXZ-qJOFPf4JSKw
/gaming
/feed/guide_builder
/watch?v=PbVt_O1kFpA
/watch?v=PbVt_O1kFpA
/user/thedjdoge
/watch?v=1lcksCjvuSs
/watch?v=1lcksCjvuSs
/channel/UCn-puiDqHNMhRvq6wsU3nsQ
/watch?v=AKj_pxp2l1c
/watch?v=AKj_pxp2l1c
/watch?v=QNnEqTQD6DM
/watch?v=QNnEqTQD6DM
/channel/UCDuOAYzgiZzqqlXd2G3GAwg
....
也许我可以使用.remove或.replace之类的东西,不知道该怎么做,所以我感谢所有帮助。
答案 0 :(得分:1)
是的,肯定是在这里过大了。这是 filter
的完美用例unique()
请注意,它会返回一个生成器,因此,如果需要列表,请将其包装在列表中。
http://book.pythontips.com/en/latest/map_filter.html很好,如果您需要更多有关执行此类数据清除功能的信息。如果您真的需要数据清理,可以考虑使用熊猫。它具有陡峭的学习曲线,但是对于复杂的数据清理来说却是很棒的。
答案 1 :(得分:0)
这应该有助于您找到所有的/watch
链接。
import re
pattern = re.compile(r"/watch")
# pattern = re.compile(r"/watch\?v=[a-zA-Z_0-9]{11}") -- This pattern is to find all the links as well
matches = pattern.finditer(<your_string>)
for m in matches:
print(m) #will print all the locations at which /watch occurs
您可以收集列表中的所有URL并继续。祝你好运!
答案 2 :(得分:0)
看看您的代码,带有str.startswith()
的简单if
语句就足以获得所需的内容。
假设links['href']
包含str
,则:
for links in recommended_vid:
href = links['href'] # I think 'href' will be of type 'str'
if href.startswith('/watch'):
print(href)
注意:.startswith()
仅在/watch
确实位于href
的开头时才有效;您还可以尝试if '/watch' in href:
,如果该字符串出现在href
中的任何位置,它将匹配。
答案 3 :(得分:0)
您可以执行以下操作
for links in recommended_vid:
if "/watch" in links[href]:
print(link[href])