鱼C论坛

 找回密码
 立即注册
查看: 1638|回复: 10

[已解决]初学者:爬虫相关问题

[复制链接]
发表于 2021-9-19 23:43:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码的作用是可以通过输入的关键字,在百度百科检索相应的内容
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([each.text])
        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, soup2.h2.text])
        content = ''.join([content, " -> ", url2])
        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转格式后,为什么要加到链接中去?
最佳答案
2021-9-19 23:50:52

问题1:为什么key是’word‘,这是有意的,还是随意什么名字都可以?


认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用  word ,现在的百度好像也省略了 直接写 wd = xxx 了,xxx 就是你搜索的关键字

问题2:怎么就知道'word'的值,在发送的请求里是,搜索栏中的值?百度百科界面,只有一个搜索框,如果某个页面有多个输入可以输入值的框,将如何区发送的请求信息里哪个值是要放到哪一个输入框中?

问题3:keyword转格式后,为什么要加到链接中去?


同上个问题,多多观察 URL ,后面问题感觉是偏 web 了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-19 23:50:52 | 显示全部楼层    本楼为最佳答案   

问题1:为什么key是’word‘,这是有意的,还是随意什么名字都可以?


认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用  word ,现在的百度好像也省略了 直接写 wd = xxx 了,xxx 就是你搜索的关键字

问题2:怎么就知道'word'的值,在发送的请求里是,搜索栏中的值?百度百科界面,只有一个搜索框,如果某个页面有多个输入可以输入值的框,将如何区发送的请求信息里哪个值是要放到哪一个输入框中?

问题3:keyword转格式后,为什么要加到链接中去?


同上个问题,多多观察 URL ,后面问题感觉是偏 web 了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-20 07:17:33 From FishC Mobile | 显示全部楼层
百度一下:get请求传递参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-20 10:30:48 | 显示全部楼层
wp231957 发表于 2021-9-20 07:17
百度一下:get请求传递参数

感谢您的指导~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-20 10:31:30 | 显示全部楼层
Twilight6 发表于 2021-9-19 23:50
认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用  wor ...

明白了,谢谢您的指导
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-20 10:48:34 | 显示全部楼层
本帖最后由 非凡 于 2021-9-20 10:52 编辑
Twilight6 发表于 2021-9-19 23:50
认真观察下 URL ,换多个关键词搜索时候 就 word = xxx 后面的 xxx 进行了改变,所以我们这里用  wor ...


还有个问题:
这是我搜索时URL:
捕获.PNG

这是我从地址栏复制下来后
https://baike.baidu.com/item/%E7%8C%AA%E5%85%AB%E6%88%92/769z

问题1:似乎url里没有采用wd=xxx的格式了?还是我找的url不对?

问题2:如果是现在用的url,那我在脚本里,该怎么传入我要搜索的关键字?搜索的关键后面的数字也是跟随变化的,那我输入关键字搜索时这url数字我怎么确认?

问题3:怎么我复制下来的和地址栏里的链接不一样?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-20 11:41:11 | 显示全部楼层
非凡 发表于 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 编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-20 12:15:10 | 显示全部楼层
get传参,参数就在 url 里面,都有关键字的
传多个参用 & 符号连接即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-20 12:57:02 | 显示全部楼层
好好学习,天天向上····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-20 17:37:54 | 显示全部楼层
本帖最后由 非凡 于 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加入正确的这数字?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-21 18:04:30 | 显示全部楼层
非凡 发表于 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  应该是百度百科的内部链接  和咱关系不大的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 07:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表