|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup
def main():
keyword = input('请输入检索关键词:') # 例如:王新衡
param = urllib.parse.urlencode({'word':keyword}) # 将用户输入的关键词传入并编译后赋值给param
print(param) # word=%E7%8E%8B%E6%96%B0%E8%A1%A1
url = 'https://baike.baidu.com/search/word?%s' % param # 将param传入url
print(url) # https://baike.baidu.com/search/w ... B%E6%96%B0%E8%A1%A1
url = 'https://baike.baidu.com/item/%s' % param[5:] # [5:]表示不要前5个字符,从第6个字符开始,即%E7%8E%8B%E6%96%B0%E8%A1%A1,传入url后为https://baike.baidu.com/item/%E7%8E%8B%E6%96%B0%E8%A1%A1
print(url) # https://baike.baidu.com/item/%E7%8E%8B%E6%96%B0%E8%A1%A1
#headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} # 可否隐藏headers???
req = urllib.request.Request(url) # 把目标字符串转换成Request对象req
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36') # 通过.add_header()方法修改/隐藏User-Agent
print(req.headers) # 查看隐藏后的headers
response = urllib.request.urlopen(req) # 将Request对象req传给urlopen函数
html = response.read().decode('utf-8') # 用.read()方法读取urlopen返回的类文件对象的内容,其中.decode('utf-8')可不需要?
soup = BeautifulSoup(html, 'html.parser') # 用BeautifulSoup模块(python库)指定解析器解析HTML或XML文件
for each in soup.find_all(href = re.compile('item'))[10:-1]: # 迭代执行用re.compile正则表达式匹配包含item的字符串如<a target="_blank" href="/item/%E5%86%85%E9%98%81%E6%80%BB%E7%90%86%E5%A4%A7%E8%87%A3/4979386" data-lemmaid="4979386">内阁总理大臣</a>,不要前10条(从第11条开始)以及不要最后一条
content = ''.join([each.text]) # 将词条名赋值给content?为何必须采用.join()方法?join字符串需要引号而词条名带引号?text从何而来?
#print(content) # 打印所有带view的词条名
url2 = ''.join(['http://baike.baidu.com', each['href'] if "%" in each['href'] else urllib.parse.quote(each['href'])]) # 判断each['href']中有无%(是否有进行了url编码),没有的话通过urllib.parse.quote话对它进行编码,然后将两部分拼接成词条名的完整网址并赋值给url2
req2 = urllib.request.Request(url2) # 把目标字符串转换成Request对象req2
response2 = urllib.request.urlopen(req2) # 将Request对象req2传给urlopen函数
html2 = response2.read().decode('utf-8') # 用.read()方法读取urlopen返回的类文件对象的内容,其中.decode('utf-8')可不需要?
soup2 = BeautifulSoup(html2, 'html.parser') # 用BeautifulSoup模块(python库)指定解析器解析HTML或XML文件
if soup2.h2: # 判断是否存在副标题,若存在,则执行下面的语句,若不存在,则跳过下面的语句继续执行
content = ''.join([content, soup2.h2.text]) # 将词条名与副标题两部分拼接并赋值给content,副标题括号从何而来?
#print(content) # 打印所有带副标题的词条名及其副标题,为何不带副标题的也打印?
content = ''.join([content, ' -> ', url2]) # 将三部分按照content -> 链接的格式拼接
print(content) # 打印输出
if __name__ == '__main__':
main() |
|