爬取百度百科上有关妇产科的语料

我写了一个Python程序,爬取了百度百科上有关妇产科的语料,把它放在了python文件同级目录 “data/产科语料.txt”, 所以要想跑通这个程序,一定要把data文件夹建立上,不然会报找不到文件错误。

我的实验环境是

python 3.5 ,第三方包:BeautifulSoup(解析html的包,可以通过相应pip命令下载获得),本程序与操作系统无关。

程序目录如下图:

这里写图片描述

程序如下:

#! /usr/bin/python
# coding=utf-8

import requests
import time
import re
from bs4 import BeautifulSoup

__http_headers__ = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
                    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko',
                    'Connection': 'keep-alive',
                    'Host': 'baike.baidu.com',
                    'Accept-Encoding': 'gzip, deflate, br',
                    'Accept-Language': 'zh-CN,zh;q=0.9',
                    }

A_HISTORY = []  # 历史标签容器,里面为已经访问的页面

A_CURRENT = ['https://baike.baidu.com/item/%E4%BA%A7%E7%A7%91']  # 当前标签容器,里面为当前访问的页面
count = 1  # 处理页面个数


def has_url(str_url):
    for i in range(0, len(A_HISTORY)):
        if str_url == A_HISTORY[i]:
            return True
    return False


def process_data(url_str, f_):
    """
    获取页面数据并存入txt文件中,详细信息请看代码注释
    :param f_: 文件流
    :param url_str: url字符串
    :return: None
    """
    global count
    # str__ = get_real_url(url_str)
    if not has_url(url_str):
        iterator = []
        res = requests.get(url_str, headers=__http_headers__)
        if res.status_code != '403':
            res.encoding = 'utf-8'

            # print(res.status_code)
            html_doc = res.text
            soup = BeautifulSoup(html_doc, 'lxml')  # 获取文档对象

            # 抓取需要的数据(除去了标签信息)
            div_all = soup.find_all('div', attrs={'class': True})
            for div in div_all:
                if 'para' in str(div['class']).strip():
                    iterator.append(str(div.text).replace(' ', '').replace('\n', ''))
            content = ''.join(iterator)

            # 去除文本中间的空格
            strinfo = re.compile(' ')
            content = strinfo.sub('', content)

            # 内容限制
            if '妇产科' in str(content) or '就诊科室' in str(content) and '妇产科' in str(content):

                # 将抓取到页面的所有内容的有效链接放入A_CURRENT中
                a_all = soup.find_all('a', attrs={'href': True})
                for a in a_all:
                    if str(a['href'].strip()).startswith('/item/%'):
                        A_CURRENT.append('https://baike.baidu.com' + a['href'].strip())

                # 将数据写入txt文件
                f_.write(content)
                f_.flush()
                # f_.close()
                iterator.clear()

                # 将url存入A_HISTORY中
                A_HISTORY.append(url_str)
                print('第 ' + str(count) + ' 个页面处理完成......')
                count += 1
            else:
                print('链接不相关')
    else:
        print("这个url已经访问过了")
    # time.sleep(5)


if __name__ == '__main__':
    print("开始处理数据.....")
    time.sleep(1)
    print("......")
    time.sleep(1)
    print("发")
    time.sleep(1)
    print("车")
    time.sleep(1)
    print("了")
    time.sleep(1)
    print("赶")
    time.sleep(1)
    print("快")
    time.sleep(1)
    print("上")
    time.sleep(1)
    print("车")
    time.sleep(1)
    print("......")
    time.sleep(1)
    print("嘀嘀...嘀嘀..")
    time.sleep(3)

    f = open('data/产科语料.txt', 'a', encoding='utf-8')
    while len(A_CURRENT) > 0:
            process_data(A_CURRENT[0], f)
            A_CURRENT.remove(A_CURRENT[0])
    f.close()
    print("什么时候到我这里啊,我尿急")
百度百科约500万条词条,可用于语义关联或简单的知识网络建立,xml格式,解压后638M,请不要用记事本直接打开,我是用UE打开的,sublime好像会有乱码,文件内容示例如下: =1 <TITLE>=百度百科 =百度百度百科,网络,百科全书,百科词典 =百度知道;贴吧;百度空间;百度地图;百度新闻搜索;百度图片;百度mp3;百度Hi;百度工具栏;百度影视;百度邮编搜索;百度黄页搜索;百度杀毒;百度语音搜索;科利尔百科全书;苏联大百科全书;汇吃百科;维基百科;百度视频;百度蜘蛛;百度文库;互动百科;百度文档;百度文化共享搜索;百度盲道;百度会员;百度搜藏;百度TV;百科全书;知识掌门人;百度游戏;百度有啊;张震;科友; =http://baike.baidu.com/view/1.htm =2 <TITLE>=词条 =百度百度百科 =相关词条; =http://baike.baidu.com/view/2.htm =3 <TITLE>=编辑实验 =百度百度百科,帮助,词条,编辑 =词条;百度; =http://baike.baidu.com/view/3.htm =4 <TITLE>=馒头 =食品,饮食,面食,食谱,蒸馍 =大饼;油条;面包;饺子;花卷;包子;麻花;食品;主食;糯米饭;蛋糕;鲜肉包;米粥;面条;凉拌菜;年糕;饼干;窝头;粽子;烤饼;酥饼;汤圆;烧饼; =http://baike.baidu.com/view/4.htm =6 <TITLE>=雁荡山 =地理,旅游,旅游景点,自然景观,地质公园 =华山;泰山;普陀山;恒山;嵩山;莫干山;浣江;衡山;括苍山;双龙洞;雪窦山;天台山;天目山;楠溪江;天柱山;景宁香炉山;乌镇;杭州西湖;泽雅;白水洋;武夷山;洞宫山;桃花岛;三清山;黄山;新安江水库;崂山区;溪口;太姥山;南麂列岛;野鹤湫;庐山;江心屿;瑶溪;朱家尖;石桅岩;绍兴县;杨家溪;仙岩山;仙都风景区;大龙湫;三折瀑;五岳; =http://baike.baidu.com/view/6.htm =7 <TITLE>=灵峰 =风景,雁荡山,地理,旅游,温州 = =http://baike.baidu.com/view/7.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值