鱼C论坛

 找回密码
 立即注册
查看: 1609|回复: 3

[已解决]关于55课百科搜索的程序

[复制链接]
发表于 2017-3-12 14:16:19 | 显示全部楼层 |阅读模式

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

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

x
感觉55课后题好多视频中没讲的地方
我百度了一些做了一些注释
希望各路大神看看注释的对不对

import urllib.request
import urllib.parse
import re #实现正则表达式的功能
from bs4 import BeautifulSoup
                                                                                                 
def main():
    keyword = input("请输入关键词:")
    keyword = urllib.parse.urlencode({"word":keyword})#把一个通俗的字符串, 转化为url格式的字符串
    
    response = urllib.request.urlopen("http://baike.baidu.com/search/word?%s" % keyword)#这里是使用urllib模块的open函数打开url
    html = response.read()#使用read函数读取网页内容 赋值给HTML
    soup = BeautifulSoup(html, "html.parser")#使用Python内置的解析器   进行网页解析   将content内容转化为BeautifulSoup格式的数据   将复杂HTML文档转换成一个复杂的树形结构.每个节点都是Python对象.

    for each in soup.find_all(href=re.compile("view")):#?以正则匹配的形式查询soup对象中所有含有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")#使用Python内置的解析器   进行网页解析
        if soup2.h2:
            content = ''.join([content, soup2.h2.text])
        content = ''.join([content, " -> ", url2])
        print(content)

if __name__ == "__main__":
    main()


我还有几个一直百度不到的疑问希望得到解答

1.
for each in soup.find_all(href=re.compile("view")):
这一语句为什么不能直接find_all('view')而是需要使用对'view'使用compile之后才能find_all 呢

2.
content = ''.join([each.text])
each.text是什么意思,是把列表里迭代出的值转换 成字符串吗?

3.
url2 = ''.join(["http://baike.baidu.com", each["href"]])
each["href"]是什么意思href代表着什么呢     还是必须得看后面关于正则的视频才能明白吗
最佳答案
2017-3-12 19:18:05
你说的这些都是BeautifulSoup的用法,你可以去看文档。
第一个:href,你去看网页的源码,你就会发现href后面的就是链接,你如果直接使用find_all(href='view'),那么最后结果就是什么都没有
第二个:each.text就是获取正文
第三个:看第一个
给你一个BeautifulSoup中文文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
你看看就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-12 18:50:01 | 显示全部楼层
哪位有好见解啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-12 19:18:05 | 显示全部楼层    本楼为最佳答案   
你说的这些都是BeautifulSoup的用法,你可以去看文档。
第一个:href,你去看网页的源码,你就会发现href后面的就是链接,你如果直接使用find_all(href='view'),那么最后结果就是什么都没有
第二个:each.text就是获取正文
第三个:看第一个
给你一个BeautifulSoup中文文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
你看看就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-14 07:28:00 | 显示全部楼层
WylLy 发表于 2017-3-12 19:18
你说的这些都是BeautifulSoup的用法,你可以去看文档。
第一个:href,你去看网页的源码,你就会发现href ...

受教了   非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 15:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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