python使用urllib,re,bs库爬取wiki百科词条

重点

爬取wiki百科词条  
    1:原理  
        名称: a标签的text属性
        url:  a标签的href属性
    2.使用工具
        urllib 获取连接和请求数据
        BeautifulSoup 解析数据,获取a标签
        re  模糊搜索,获取连接地址
    3.注意重点
        请求头的封装,----------》》》user-agent
        解码---------》》》read().decode("utf-8")
        除去图片链接地址---------》》》if not re.search("\.(jpg|JPG|png)$", link["href"])

代码

import re
from urllib.request import Request
from urllib.request import urlopen

from bs4 import BeautifulSoup as bs


"""
爬取wiki百科词条  
    1:原理  
        名称: a标签的text属性
        url:  a标签的href属性
    2.使用工具
        urllib 获取连接和请求数据
        BeautifulSoup 解析数据,获取a标签
        re  模糊搜索,获取连接地址
    3.注意重点
        请求头的封装,----------》》》user-agent
        解码---------》》》read().decode("utf-8")
        除去图片链接地址---------》》》if not re.search("\.(jpg|JPG|png)$", link["href"]):

"""


def t_():
    url = "https://bk.tw.lvfukeji.com/baike-Wikipedia:%E9%A6%96%E9%A1%B5"
    """
        req = Request(url)
         req.add_header("user-agent",
               "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36")

    """

    # 封装头部  添加代理
    header = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
    req = Request(url=url, headers=header)
    # 返回响应
    res = urlopen(req).read().decode("utf-8")
    # 解析html,bs可以自动将获取到的文本转换为utf-8编码格式
    soup = bs(res, "html.parser")
    # 提取数据
    url_list = soup.find_all("a", href=re.compile(r"^https://bk.tw.lvfukeji.com/"))
    # url_list = soup.find_all("a", href=re.compile(r"^/wiki/"))
    # 输出所有的词条对应的名称和url
    for link in url_list:
        # 除去图片链接
        if not re.search("\.(jpg|JPG|png)$", link["href"]):
        # string 只能获取一条文本信息,get_text()可以获取多条信息
            print(link.string, "<<----------->>", link["href"])


if __name__ == '__main__':
    t_()

"""
中文维基百科 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E5%85%B3%E4%BA%8E
人人可編輯 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E6%AC%A2%E8%BF%8E
自由 <<----------->> https://bk.tw.lvfukeji.com/baike-%E8%87%AA%E7%94%B1%E5%85%A7%E5%AE%B9
1,159,912 <<----------->> https://bk.tw.lvfukeji.com/baike-Special:%E7%BB%9F%E8%AE%A1
條目 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E4%BB%80%E4%B9%88%E6%98%AF%E6%9D%A1%E7%9B%AE
分类 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E5%88%86%E7%B1%BB%E7%B4%A2%E5%BC%95
主题 <<----------->> https://bk.tw.lvfukeji.com/baike-Portal:%E9%A6%96%E9%A0%81
求助 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:VPA
入门 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E6%96%B0%E6%89%8B%E5%85%A5%E9%96%80/%E4%B8%BB%E9%A0%81
沙盒 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E6%B2%99%E7%9B%92
捐款 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E8%81%94%E7%B3%BB%E6%88%91%E4%BB%AC/%E6%8D%90%E6%AC%BE
南方十字 <<----------->> https://bk.tw.lvfukeji.com/baike-%E5%8D%97%E6%96%B9%E5%8D%81%E5%AD%97_(%E6%97%A0%E5%AD%97%E5%B0%8F%E8%AF%B4)
无字小说 <<----------->> https://bk.tw.lvfukeji.com/baike-%E6%97%A0%E5%AD%97%E5%B0%8F%E8%AF%B4
核试验 <<----------->> https://bk.tw.lvfukeji.com/baike-%E6%A0%B8%E8%AF%95%E9%AA%8C
太平洋岛原住民 <<----------->> https://bk.tw.lvfukeji.com/baike-%E5%A4%AA%E5%B9%B3%E6%B4%8B%E5%B3%B6%E5%8E%9F%E4%BD%8F%E6%B0%91
美国军方在比基尼环礁核试验 <<----------->> https://bk.tw.lvfukeji.com/baike-%E5%8D%81%E5%AD%97%E8%B7%AF%E5%8F%A3%E8%A1%8C%E5%8A%A8
法朗士·麦绥莱勒 <<----------->> https://bk.tw.lvfukeji.com/baike-%E6%B3%95%E6%9C%97%E5%A3%AB%C2%B7%E9%BA%A6%E7%BB%A5%E8%8E%B1%E5%8B%92
其他典範條目 <<----------->> https://bk.tw.lvfukeji.com/baike-Wikipedia:%E5%85%B8%E7%AF%84%E6%A2%9D%E7%9B%AE
入殓师 <<----------->> https://bk.tw.lvfukeji.com/baike-%E9%80%81%E8%A1%8C%E8%80%85%EF%BC%9A%E7%A6%AE%E5%84%80%E5%B8%AB%E7%9A%84%E6%A8%82%E7%AB%A0
管胞 <<----------->> https://bk.tw.lvfukeji.com/baike-%E7%AE%A1%E8%83%9E"""

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用ElementTree或lxml来解析维基百的XML文件。这里以lxml为例,演示如何解析维基百的XML文件: 1. 首先,下载维基百的XML文件,比如英文维基百的最新版本可以从这里下载:https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2 2. 解压缩下载的XML文件,得到一个XML文件,比如enwiki-latest-pages-articles.xml。 3. 使用lxmlXML文件,并解析XML文件中的页面(page)元素: ```python from lxml import etree # 打开XML文件 with open('enwiki-latest-pages-articles.xml', 'rb') as f: # 创建解析器 parser = etree.XMLPullParser(['start', 'end']) # 循环遍历XML文件 for line in f: parser.feed(line) for event, elem in parser.read_events(): if event == 'end' and elem.tag == '{http://www.mediawiki.org/xml/export-0.10/}page': # 输出页面的标题和内容 title = elem.findtext('{http://www.mediawiki.org/xml/export-0.10/}title') text = elem.findtext('{http://www.mediawiki.org/xml/export-0.10/}revision/{http://www.mediawiki.org/xml/export-0.10/}text') print(title, text[:100]) # 清空元素 elem.clear() # 跳过子元素 while elem.getprevious() is not None: del elem.getparent()[0] del elem ``` 这段代码读XML文件的每一行,将其传递给解析器。当解析器遇到页面元素时,提页面的标题和内容,并输出。 注意,这里使用了XML命名空间来解析维基百的XML文件。维基百的XML文件使用了命名空间,所以要使用命名空间来访问元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值