用requests在命令行中实现bing搜索

该博客展示了如何利用Python的requests和正则表达式库来从Bing搜索引擎获取关键词搜索结果。首先,定义了不同颜色的样式,然后通过正则表达式匹配网页源代码中的标题、摘要和链接。接着,对提取的数据进行清洗,去除不必要的HTML标签和空白字符。最后,程序会按顺序打印出标题、摘要和链接,并询问用户是否继续到下一页。这是一个基础的网络爬虫应用,适合初学者入门。
摘要由CSDN通过智能技术生成
import requests
import re
from prompt_toolkit import print_formatted_text,HTML
from prompt_toolkit.styles import Style

# 设置文字颜色
style = Style.from_dict({
    'aaa': '#FFFFFF',
    'bbb': '#44ff00 italic',
    'ttt': '#0000FF'
})

# 正则提取摘要和链接
title_pattern = re.compile('<a.target=..blank..target..(.*?)</a>')
brief_pattern = re.compile('K=.SERP(.*?)</p>')
#link_pattern = re.compile("(?<=(<cite>))(.*?)(?=</cite>)")
link_pattern = re.compile('(?<=(a.target=._blank..target=._blank..href=.))(.*?)(?=(..h=))')

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36 Edg/94.0.992.31'}

# 要搜索多个关键词用+分隔
keyword = input("What you want to search?  ")

page = 0
count = -10
while count < 0:
    url = 'https://cn.bing.com/search?q={}&first={}'.format(keyword,page)
    res = requests.get(url,headers=headers)
    r = res.text
    
    title = title_pattern.findall(r)
    brief = brief_pattern.findall(r)
    link = link_pattern.findall(r)
    
    # 数据清洗
    clear_brief = []
    for i in brief:
        tmp = re.sub('<[^<]+?>', '', i).replace('\n', '').strip()
        tmp1 = re.sub('^.*&ensp;','', tmp).replace('\n', '').strip()
        tmp2 = re.sub('^.*>','',tmp1).replace('\n','').strip()
        clear_brief.append(tmp2)
    
    clear_title = []
    for i in title:
    	tmp = re.sub('^.*?>','', i).replace('\n', '').strip()
    	tmp2 = re.sub('<[^<]+?>', '', tmp).replace('\n', '').strip()
    	clear_title.append(tmp2)
    
    #output	
    for i in range(len(brief)):
        print_formatted_text(HTML('<ttt>{}</ttt>'.format(clear_title[i])),style=style)
        print_formatted_text(HTML('<aaa>{}</aaa>'.format(clear_brief[i])),style=style)
        print_formatted_text(HTML('<bbb>{}</bbb>'.format(link[i][1])),style=style)
        print("============================================")
        print(" ")
    
    page += 10
    count += -10
    N = input("Do you want next page ENTER [y] or [n]?  ")
    
    if N == 'n':
        break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值