初学者:爬虫相关问题
代码的作用是可以通过输入的关键字,在百度百科检索相应的内容import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup
def main():
keyword = input("请输入关键词:")
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()
复制代码
上面代码中的这小段代码不是很理解
keyword = input("请输入关键词:")
keyword = urllib.parse.urlencode({"word":keyword})
response = urllib.request.urlopen("http://baike.baidu.com/search/word?%s" % keyword)
这里很显然把输入的关键字,赋予了keyword变量,然后将变量做为值放到了一个字典里key为'word'
问题1:为什么key是’word‘,这是有意的,还是随意什么名字都可以?
问题2:怎么就知道'word'的值,在发送的请求里是,搜索栏中的值?百度百科界面,只有一个搜索框,如果某个页面有多个输入可以输入值的框,将如何区发送的请求信息里哪个值是要放到哪一个输入框中?
问题3:keyword转格式后,为什么要加到链接中去?
问题1:为什么key是’word‘,这是有意的,还是随意什么名字都可以?
认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用word ,现在的百度好像也省略了 直接写 wd = xxx 了,xxx 就是你搜索的关键字
问题2:怎么就知道'word'的值,在发送的请求里是,搜索栏中的值?百度百科界面,只有一个搜索框,如果某个页面有多个输入可以输入值的框,将如何区发送的请求信息里哪个值是要放到哪一个输入框中?
问题3:keyword转格式后,为什么要加到链接中去?
同上个问题,多多观察 URL ,后面问题感觉是偏 web 了
百度一下:get请求传递参数 wp231957 发表于 2021-9-20 07:17
百度一下:get请求传递参数
感谢您的指导~ Twilight6 发表于 2021-9-19 23:50
认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用wor ...
明白了,谢谢您的指导 本帖最后由 非凡 于 2021-9-20 10:52 编辑
Twilight6 发表于 2021-9-19 23:50
认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用wor ...
还有个问题:
这是我搜索时URL:
这是我从地址栏复制下来后
https://baike.baidu.com/item/%E7%8C%AA%E5%85%AB%E6%88%92/769z
问题1:似乎url里没有采用wd=xxx的格式了?还是我找的url不对?
问题2:如果是现在用的url,那我在脚本里,该怎么传入我要搜索的关键字?搜索的关键后面的数字也是跟随变化的,那我输入关键字搜索时这url数字我怎么确认?
问题3:怎么我复制下来的和地址栏里的链接不一样?
非凡 发表于 2021-9-20 10:48
还有个问题:
这是我搜索时URL:
https://baike.baidu.com/item/%E7%8C%AA%E5%85%AB%E6%88%92/769z
这里找到URL规律就行,实际上 猪八戒 被 URL 转码 成 %E7%8C%AA%E5%85%AB%E6%88%92 了
你只需要将你输入字符,转换为 URL 编码然后格式化入 URL 这个位置即可,urllib 库中 quote 可以将字符转为 URL 编码 get传参,参数就在 url 里面,都有关键字的
传多个参用 & 符号连接即可 好好学习,天天向上····{:5_95:} 本帖最后由 非凡 于 2021-9-20 17:48 编辑
Twilight6 发表于 2021-9-19 23:50
认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用wor ...
URL 中只允许使用 ASCII 字符集,所以参数传进去需要转码我理解了。
但是有一点还没理解的地方
1、像百度百科这url,参数是接在item/后面直接接着
http://baike.baidu.com/item/猪八戒/769
那我使用rllib.parse.urlencode转码的时候,是不是不用带‘word’这个key了,那我还需不需要用{}?
keyword = urllib.parse.urlencode(keyword)
这样转码对吗?
还是只能用
keyword = urllib.parse.quote(keyword)
2、我试过了url后面的这数字是跟随搜索的关键字变化的,那我怎么在url加入正确的这数字? 非凡 发表于 2021-9-20 17:37
URL 中只允许使用 ASCII 字符集,所以参数传进去需要转码我理解了。
但是有一点还没理解的地方
"http://baike.baidu.com/search/word?%s" % keyword
这个就可以获取到全部数据了,不需要再进行url解析了
['https://baike.baidu.com/item/%E5%AD%99%E6%82%9F%E7%A9%BA/5576']
['https://baike.baidu.com/item/%E7%8C%AA%E5%85%AB%E6%88%92/769']
类似这样的href应该是百度百科的内部链接和咱关系不大的了
页:
[1]