Cminglyer 发表于 2020-5-19 23:33:22

055课 爬百度百科“网络爬虫”的词条 问题

请教各位大神:

0. 编写一个爬虫,爬百度百科“网络爬虫”的词条(链接 -> http://baike.baidu.com/view/284853.htm),将所有包含“view”的链接按下边格式打印出来

soup.find_all(href=re.compile("view"))

答案里的正则表达式为何这样写就可以了? 不是应该写成href = re.compile("(包含各种字母数字符号)view (包含各种字母数字符号)")这种形式吗?(此处我想表达的是view 前后应该有很多字母数字符号 组成完整的链接地址)

为何直接 href=re.compile("view") 就能表示 含“view” 这个词 的链接???

ouyunfu 发表于 2020-5-20 01:43:26

https://www.crummy.com/software/BeautifulSoup/bs4/doc/#calling-a-tag-is-like-calling-find-all

Twilight6 发表于 2020-5-20 01:49:33

小甲鱼答案里的超链接都带有 'view'

https://xxx.ilovefishc.com/forum/201605/17/155015bkwikm9tphedz4ev.png

但百度这几年词条里的超链接格式已经有些许的改变了,直接查找view已经没用了,只会出现几个和你想要的无关的链接

但是通过观察下图百度词条的审核元素发现他们都带有 'item' 这个字符,所以我们查找的应该是 'item' 而不是 'view'



你可用把soup.find_all(href=re.compile("view"))改成 soup.find_all(href=re.compile("item"))试着打印出来

ps: 这里为什么使用切片了 因为我通过调试发现这样匹配到的数据前七条都是不属于词条内超链接的链接,最后一条是编辑者的链接使用,所有这里过滤掉

回到你的问题:

href=re.compile("view") 的作用应该是编译一个正则表达式对象,然后被Beautiful Soup用于被find_all匹配所有href 中含有 view 的数据并返回成一个列表形式

如果对你有帮助,那就设置个最佳吧{:10_287:}




v.ki 发表于 2020-5-20 08:16:47

你居然用爬虫爬取爬虫爬取的东西

19971023 发表于 2020-5-22 18:06:33

我想问一下,each.text是什么意思,为什么会返回中文
页: [1]
查看完整版本: 055课 爬百度百科“网络爬虫”的词条 问题