百度词语爬虫

"""一:百度词语爬虫"""
import urllib.request
from lxml import etree
from urllib.parse import urlencode, unquote
import requests
import re
import json
import time

def digui(url,headers):
    try:
        request = urllib.request.Request(url, headers=headers)
        html = urllib.request.urlopen(request, timeout=0.7).read().decode("utf8")
        return html
    except:
        time.sleep(10)
        digui(url,headers)


def load_baidu_page(kw,url):
    # 获取html页面
    dic1 = {}
    """获取html页面"""
    headers = {
        'Accept': 'text / html, application / xhtml + xml, application / xml,*/*;q = 0.9;q = 0.8',
        'Accept - Encoding': 'gzip, deflate, br',
        'Accept - Language': 'zh - CN, zh;q = 0.9',
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

    }
    html = digui(url,headers)
    content = etree.HTML(str(html))
    if len(kw) == 1:
        link_list_pinyin = content.xpath('//div[@class="pronounce"]//b/text()')     #拼音
        link_list1 = content.xpath('//div//p/text()')            #详细信息
        link_synonym = content.xpath('//div[@id="synonym"]//a/text()')  # 近义词
        link_antonym = content.xpath('//div[@id="antonym"]//a/text()')  # 反义词
        link_redical = content.xpath('//li[@id="radical"]/span/text()')        #部首
        link_stroke = content.xpath('//li[@id="stroke_count"]/span/text()')        #笔画
        link_content = content.xpath('//div[@class="tab-content"]/a/text()')         #相关组词

        dic1["关键词"] = kw
        dic1['拼音'] = link_list_pinyin
        dic1["释义"] = link_list1
        dic1["近义词"] = link_synonym
        dic1["反义词"] = link_antonym
        dic1["部首"] = link_redical
        dic1["笔画"] = link_stroke
        dic1["相关组词"] = link_content
    else:
        #获取详细信息
        link_list1 = content.xpath('//div//p/text()')

        link_list_pinyin = content.xpath('//div/dl/dt[@class="pinyin"]/text()')     #拼音
        link_synonym = content.xpath('//div[@id="synonym"]//a/text()')              #近义词
        link_antonym = content.xpath('//div[@id="antonym"]//a/text()')              #反义词


        dic1["关键词"] = kw
        dic1['拼音'] = link_list_pinyin
        dic1["释义"] = link_list1
        dic1["近义词"] = link_synonym
        dic1["反义词"] = link_antonym

    save_file(dic1)

def save_file(dic):           #写入文件
    json_str = json.dumps(dic, ensure_ascii=False, indent=4)
    with open("result.json","a",encoding="utf8") as file1:
        file1.write(json_str)



if __name__ == "__main__":
    """输入要搜索的关键词和对应的url地址"""
    # kw = input("请输入要搜索的关键词: ")
    url = "https://hanyu.baidu.com/s"
    with open("现代汉语常用词表.txt","r",encoding="utf8") as file2:
        lines = file2.readlines()
        for line in lines:
            line = line.split()
            if len(line) == 0:
                continue
            kw = line[0]
            print(kw)
            word = {"wd": kw}
            key = urllib.parse.urlencode(word)
            fullurl = url + "?" + key + "&ptype=zici"          #完整url
            load_baidu_page(kw,fullurl)  # 进入到百度搜索结果的页面

分字词两种情况分别处理,用的语料为现在汉语常用词共56000多条。
在这里插入图片描述
处理结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
百度地图爬虫是指使用Python等编程语言编写脚本,通过模拟浏览器行为或利用百度地图API接口,获取和抓取百度地图上的数据,比如地址信息、路线规划、POI(Point of Interest,兴趣点)等。然而,需要注意的是,百度地图有明确的使用条款和API策略,未经许可的爬虫行为可能会被视为违反服务条款,甚至可能面临法律风险。 以下是使用Python爬取百度地图的一些基本步骤: 1. **使用官方API**:如果需要获取公开的数据,可以考虑使用百度地图的Web API,例如Geocoding API、路线规划API等。但要注意检查并遵守API的使用限制和频率控制。 ```python import requests from bs4 import BeautifulSoup # 使用requests获取HTML内容 response = requests.get('https://map.baidu.com/') # 解析HTML内容,寻找所需数据 soup = BeautifulSoup(response.text, 'lxml') # 示例:解析地址元素 address Elements = soup.find_all('div', class_='location-address') ``` 2. **模拟浏览器(User-Agent)**:如果你的目标是访问非公开的数据或动态加载的内容,可能需要设置合适的User-Agent,并使用如Selenium这样的工具来模拟浏览器行为。 ```python from selenium import webdriver # 创建ChromeDriver实例 driver = webdriver.Chrome() driver.get('https://map.baidu.com/') # 获取页面源代码 page_source = driver.page_source ``` 3. **处理反爬策略**:注意百度地图可能会有反爬机制,比如验证码、IP封锁等。为了长期稳定地爬取数据,需要设置合理的请求间隔,使用代理IP,或者考虑使用动态代理服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值