【求助】第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()
1,这个网址是进入百度百科点击全站搜索的网址。
2,urlencode可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,
为什么要键要用word,是因为全站搜索的网址是这样的https://baike.baidu.com/search?word=百度百科,网址的键值对里规定了word是键,然后通过下面的urllib.request.urlopen,将网址改为传入键值对的网址,就能吻合百度百科搜索的要求了 本帖最后由 XiaoPaiShen 于 2019-10-5 12:29 编辑
1. 首先进入百度的search页面,再从该页面中提取含有‘view’的元素,重新组成网址查询。
2. urlencode将查询的内容编码,才可以放在url中,汉字等unicode不能直接放在url中 弱弱的佳佳 发表于 2019-10-4 10:16
1,这个网址是进入百度百科点击全站搜索的网址。
2,urlencode可以把key-value这样的键值对转换成我们想要 ...
那如果下次我再写类似的代码,该怎么确定网址变化的规律,以及网址的键? 1. 这个网址是经过编码后的。
2. 关于 urlencode 的功能和用法可以参考 https://blog.csdn.net/weixin_43411585/article/details/88854544。 瑁怕瑁 发表于 2019-10-4 14:24
那如果下次我再写类似的代码,该怎么确定网址变化的规律,以及网址的键?
确定爬取某个网页前,要去‘踩点’,那个时候就要观察这个键值对怎么写了! 弱弱的佳佳 发表于 2019-10-4 15:40
确定爬取某个网页前,要去‘踩点’,那个时候就要观察这个键值对怎么写了!
键值一般是在什么位置,有规律吗?
fiddler抓包 本帖最后由 瑁怕瑁 于 2019-10-4 22:30 编辑
kaohsing 发表于 2019-10-4 17:50
fiddler抓包
没学过,还有其他方法吗? 瑁怕瑁 发表于 2019-10-4 15:56
键值一般是在什么位置,有规律吗?
一般都在链接网址的?后面 弱弱的佳佳 发表于 2019-10-5 08:41
一般都在链接网址的?后面
明白了!感谢!{:10_288:} 别忘了设为最佳答案 还没看到 请问 56课 之后的练习在哪儿,我找不到{:5_94:} 龙王山下草 发表于 2019-10-11 13:43
请问 56课 之后的练习在哪儿,我找不到
我写错了,应该是55课的练习!{:5_111:} 感谢楼主分享 可以参考这个学习https://www.cnblogs.com/caicaihong/p/5687522.html
页:
[1]