马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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代表着什么呢 还是必须得看后面关于正则的视频才能明白吗
你说的这些都是BeautifulSoup的用法,你可以去看文档。
第一个:href,你去看网页的源码,你就会发现href后面的就是链接,你如果直接使用find_all(href='view'),那么最后结果就是什么都没有
第二个:each.text就是获取正文
第三个:看第一个
给你一个BeautifulSoup中文文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
你看看就知道了
|