python 抓取百度搜索名称和路径

python 新手笔记:利用python,根据搜索关键字,抓取其结果的名称和路径。

 

一、百度搜索参数介绍

pn :抓取第几页内容

cl :搜索的类型 3 为网页搜索 2为新闻搜索

wd :搜索关键字

rn  :需要搜索多少条结果

 

详情可参阅:http://blog.sina.com.cn/s/blog_3e28c8a50102v0ck.html

 

二、定义pthon函数

# coding: UTF-8
import urllib.request 
import urllib.parse
import re

# 查询名称   查询条数
def findBaiduUrlList(searchName,number):
    #定义百度搜索请求URL
    url="http://www.baidu.com/s?pn=0&cl=3&rn="+str(number)
    #将中文进行URL编码
    url = url +"&wd="+urllib.parse.quote(searchName)
    #发起request请求,并获取返回结果
    response = urllib.request.urlopen(url)
    #将返回结果进行转换成UTF-8转码
    html = response.read().decode('utf-8')
    #定义截取字符串正则表达式
    splitPattern = re.compile(r'<h3 \D*">')
    requestList = re.split(splitPattern,html)
    
    myUrl=[]
    for c in requestList:
        #清楚换行和前后空格
        c=trim(c)
        if c.startswith('<a') :
            #定义返回结果
            urlObj = ['','']
            urlPattern = re.compile(r'http://www.baidu.com/link.{0,300}target="_blank"')
            urlsMatch = urlPattern.search(c) 
            if urlsMatch: 
                urlObj[1]= trims(urlsMatch.group())            
            
            namePattern = re.compile(r'target="_blank"\s*>.{0,40}</a>')
            nameMatch = namePattern.search(c) 
            if nameMatch: 
                urlObj[0] = trims(nameMatch.group())
            
            myUrl.append(urlObj)
            
        else:
            c = ''
    return myUrl
        
#清除无用字符信息
def trims(str):
    str = str.strip('target="_blank"')
    str = str.replace('<em>','').replace('</em>','').replace('</a>','')
    str = str.replace('>','').replace('"','').replace(' ','').replace('	','')
    return trim(str)
#清除换行和前后空格
def trim(str):
    str = str.replace('\n','').strip()
    return str

   

   python正则表达式可参阅:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

 

三、调用代码

myUrl = findBaiduUrlList('timerbin',1)

for c in myUrl:
    print(c)

 

四、输出结果

    ['返回链接名称','链接地址']

['TimerBin的博客-ITeye技术网站', 'http://www.baidu.com/link?url=Rvj1VAmkb6527AEXIMQnSKSRFvy4jT0BAYnHjw3Gu4npAccEysMnyRi0fj3Ziwqr']

 

 

 

 

### 使用Python百度地图API抓取数据并生成地图可视化 #### 准备工作 为了完成此任务,需先安装必要的库。`pandas`用于处理Excel文件中的数据;`requests`则负责发送HTTP请求给百度地图API。 ```bash pip install pandas requests ``` #### 获取经纬度信息 从指定的Excel文档中加载地址列表,并调用百度地图API来转换成地理坐标系下的位置描述——即经纬度。 ```python import pandas as pd import requests def get_location(address, ak='Your_Baidu_API_Key'): url = f"http://api.map.baidu.com/geocoding/v3/?address={address}&output=json&ak={ak}" response = requests.get(url).json() if 'result' in response and 'location' in response['result']: location = response['result']['location'] return {'lat': location['lat'], 'lng': location['lng']} else: print(f"Error fetching coordinates for {address}") return None data = pd.read_excel('test_baidu.xlsx') locations = [] for addr in data['地址']: # 假设有一个名为‘地址’的列存储待查询的位置名称 loc = get_location(addr) locations.append(loc) data[['纬度', '经度']] = pd.DataFrame(locations) data.to_excel("updated_test_baidu.xlsx", index=False) # 将更新后的表格保存回新的Excel文件 ``` 这段代码会读入一个包含多个中国城市名或其他具体地理位置字符串的Excel表单,向百度地图发起请求以获得这些地方的确切GPS坐标,并最终把这些新字段写回到原始的数据集中去[^1]。 #### 创建HTML标记内容 接下来创建适合嵌入到HTML页面内的JSON对象数组形式的内容片段: ```python data_html = pd.DataFrame(columns=['content']) for idx in data.index: item = { "lat": float(data.loc[idx, '纬度']), "lng": float(data.loc[idx, '经度']), "quyu": str(data.loc[idx, '圈定区域']) # 这里假设还有一个叫作“圈定区域”的属性用来区分不同的地区类别 } json_str = ','.join([f"'{key}':'{value}'" for key, value in item.items()]) content_item = "{" + json_str.replace("'", "\"") + "}," data_html.at[idx, 'content'] = content_item data_html.to_csv("data_html.csv", encoding="gbk", header=False, index=False) ``` 上述脚本遍历DataFrame每一行记录,构建了一个由字典组成的列表,其中包含了每条记录对应的纬度、经度以及可能存在的其他元数据(比如这里的“圈定区域”)。之后再把它们转化为易于解析的一系列JSON格式字符串,并导出至CSV文件以便后续操作[^3]。 #### 构建交互式Web Map 最后一步是基于之前准备好的静态资源,在本地环境中搭建起能够动态显示所有标注点的地图界面。这通常涉及到复制官方提供的模板样例,替换掉默认示例外部引入的数据源路径指向自定义生成的结果集即可实现个性化定制化需求。 对于具体的实施细节,请参照百度地图开放平台所提供的开发者指南与实例教程进行调整优化[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值