瑁怕瑁 发表于 2019-10-2 21:21:24

【求助】第56讲课后练习一的问题。

本帖最后由 瑁怕瑁 于 2019-10-3 17:21 编辑

一下是小甲鱼的答案:
import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup

def main():
    keyword = input("请输入关键词:")

我的问题在下面两句,小甲鱼是从什么地方获得这个网址的?为什么跟我从网址栏获得的不一样?

还有“urlencode”的功能和用法是什么?为什么后面参数的键要用“word”,为什么“keyword”经过urlencode之后,与下面一句的网址结合就能变成想要的百科网址?

    keyword = urllib.parse.urlencode({"word":keyword})
    response = urllib.request.urlopen("http://baike.baidu.com/search/word?%s" % keyword)

    html = response.read()
    soup = BeautifulSoup(html, "html.parser")

    for each in soup.find_all(href=re.compile("view")):
      content = ''.join()
      url2 = ''.join(["http://baike.baidu.com", each["href"]])
      response2 = urllib.request.urlopen(url2)
      html2 = response2.read()
      soup2 = BeautifulSoup(html2, "html.parser")
      if soup2.h2:
            content = ''.join()
      content = ''.join()
      print(content)

if __name__ == "__main__":
    main()

弱弱的佳佳 发表于 2019-10-4 10:16:28

1,这个网址是进入百度百科点击全站搜索的网址。
2,urlencode可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,
为什么要键要用word,是因为全站搜索的网址是这样的https://baike.baidu.com/search?word=百度百科,网址的键值对里规定了word是键,然后通过下面的urllib.request.urlopen,将网址改为传入键值对的网址,就能吻合百度百科搜索的要求了

XiaoPaiShen 发表于 2019-10-4 12:04:30

本帖最后由 XiaoPaiShen 于 2019-10-5 12:29 编辑

1. 首先进入百度的search页面,再从该页面中提取含有‘view’的元素,重新组成网址查询。
2. urlencode将查询的内容编码,才可以放在url中,汉字等unicode不能直接放在url中

瑁怕瑁 发表于 2019-10-4 14:24:15

弱弱的佳佳 发表于 2019-10-4 10:16
1,这个网址是进入百度百科点击全站搜索的网址。
2,urlencode可以把key-value这样的键值对转换成我们想要 ...

那如果下次我再写类似的代码,该怎么确定网址变化的规律,以及网址的键?

zltzlt 发表于 2019-10-4 15:36:46

1. 这个网址是经过编码后的。
2. 关于 urlencode 的功能和用法可以参考 https://blog.csdn.net/weixin_43411585/article/details/88854544。

弱弱的佳佳 发表于 2019-10-4 15:40:47

瑁怕瑁 发表于 2019-10-4 14:24
那如果下次我再写类似的代码,该怎么确定网址变化的规律,以及网址的键?

确定爬取某个网页前,要去‘踩点’,那个时候就要观察这个键值对怎么写了!

瑁怕瑁 发表于 2019-10-4 15:56:04

弱弱的佳佳 发表于 2019-10-4 15:40
确定爬取某个网页前,要去‘踩点’,那个时候就要观察这个键值对怎么写了!

键值一般是在什么位置,有规律吗?

kaohsing 发表于 2019-10-4 17:50:30

fiddler抓包                     

瑁怕瑁 发表于 2019-10-4 20:53:22

本帖最后由 瑁怕瑁 于 2019-10-4 22:30 编辑

kaohsing 发表于 2019-10-4 17:50
fiddler抓包

没学过,还有其他方法吗?

弱弱的佳佳 发表于 2019-10-5 08:41:42

瑁怕瑁 发表于 2019-10-4 15:56
键值一般是在什么位置,有规律吗?

一般都在链接网址的?后面

瑁怕瑁 发表于 2019-10-6 00:02:55

弱弱的佳佳 发表于 2019-10-5 08:41
一般都在链接网址的?后面

明白了!感谢!{:10_288:}

弱弱的佳佳 发表于 2019-10-6 09:45:38

别忘了设为最佳答案

TimeLose 发表于 2019-10-7 16:59:40

还没看到

龙王山下草 发表于 2019-10-11 13:43:41

请问 56课 之后的练习在哪儿,我找不到{:5_94:}

瑁怕瑁 发表于 2019-10-12 23:25:49

龙王山下草 发表于 2019-10-11 13:43
请问 56课 之后的练习在哪儿,我找不到

我写错了,应该是55课的练习!{:5_111:}

winsome8538 发表于 2020-2-24 16:47:53

感谢楼主分享

心驰神往 发表于 2020-11-17 11:54:54

可以参考这个学习https://www.cnblogs.com/caicaihong/p/5687522.html
页: [1]
查看完整版本: 【求助】第56讲课后练习一的问题。