|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
看了半天,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'))[41:86]:
- # print(i)
- # print(each['href'])
- print(urllib.parse.unquote((each['href'].split('/', 2)[2])))
- # i += 1
- princess[i] = [urllib.parse.unquote((each['href'].split('/', 2)[2])),'none']
- i += 1
- print('-------------------------------------------------------------')
- i = 0
- for each in soup.find_all(src=re.compile('Icon_unit')):
- print(each['src'])
- princess[i][1] = 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好用,直接用别人的代码也是感觉非常好用,但是自己懵的很.... 求大佬帮忙优化代码, 或者给一些解释和意见, 或者推荐点可以自学的方向或者内容
万分谢谢
本帖最后由 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"
这个是为了更精确的匹配
|
|