关于beautifulsoup的几个初级问题
看了半天,beautifulsoup,最后还是似懂非懂尝试用beautifulsoup爬点最近玩的手游的小icon,写了以下编码
import urllib.request
import re
from bs4 import BeautifulSoup
def main():
url = r'https://wiki.biligame.com/pcr/%E9%98%B5%E8%90%A5%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A'
response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'html.parser')
princess = dict()
i = 0
for each in soup.find_all(href=re.compile('pcr')):
# print(i)
# print(each['href'])
print(urllib.parse.unquote((each['href'].split('/', 2))))
# i += 1
princess = .split('/', 2))),'none']
i += 1
print('-------------------------------------------------------------')
i = 0
for each in soup.find_all(src=re.compile('Icon_unit')):
print(each['src'])
princess = each['src']
i += 1
if __name__ == '__main__':
main()
主要就是从:url = r'https://wiki.biligame.com/pcr/%E9%98%B5%E8%90%A5%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A'
这个小页面 爬一每个角色的名字和角色icon图的下载地址
但是问题来了,我觉得自己写的很蠢,查找关键内容的精度不够,导致需要用很笨的方法重新筛选内容
以及有以下几个问题希望大佬帮助:
find_all(href=re.compile('pcr')的意思是找到所有href=后面有pcr关键词的string?
然后each in soup.find_all的each 类型是个tag,这个tag是个什么类型?是说可以通过each['src']找到所有以src开头的内容?
都说beautifulsoup好用,直接用别人的代码也是感觉非常好用,但是自己懵的很.... 求大佬帮忙优化代码, 或者给一些解释和意见, 或者推荐点可以自学的方向或者内容
万分谢谢
哈哈 我最近也有看这部番{:10_297:} 本帖最后由 liuzhengyuan 于 2020-6-21 18:24 编辑
你是要爬取图片地址吗?
其实这个 bs4 不好爬的
我做了个正则版的,几行搞定!
from requests import get
import re
res = get("https://wiki.biligame.com/pcr/%E9%98%B5%E8%90%A5%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A")
html = res.text
s = re.compile(r'<img alt="Icon unit \d+?.png" src="(.+?)"')
lst = s.findall(html)
for i in lst:
print(i)
解释一下:
前几行获取网页源代码(html为获得的源代码)
第 7 行开始匹配
字符串中的小括号中是要匹配的地址,因为每个地址不一样,所以用 .+? 表示
"Icon unit \d+?.png"
这个是为了更精确的匹配 liuzhengyuan 发表于 2020-6-21 18:21
你是要爬取图片地址吗?
其实这个 bs4 不好爬的
收到,感谢,看来也要灵活应用正则表达式啊 自己举例补充一下,也是作为记录
例子:
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
tag = soup.b
tag.name -> b 这个是的名字
tag.attrs -> {'class':['boldest'] 这个是属性,一个tag可能有很多属性,以字典形式储存
tag.string -> Extremely bold 这是一个navigable string,如果想在bs外面使用,需要用str()进行转化完使用
页:
[1]