爬虫示例程序

原创 2017年01月03日 14:27:14
import requests
from bs4 import BeautifulSoup
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

base_url = 'http://history.xikao.com'
response = requests.get(base_url + '/people')
soup = BeautifulSoup(response.text'html.parser')

a_family_array = soup.find('div'id='article').ul.findAll('a')
#存放每个演员名字和网址的dict
name_url = dict()
#演员总数
peopleNum = 0
dis_num = 0
#遍历所有姓氏
for a_family in a_family_array:
    response = requests.get(base_url + a_family['href'])
    soup = BeautifulSoup(response.text'html.parser')

    #得到所有演员的a标签
    a_name_array = soup.find('div'id='article').findAll('a')

    #遍历所有演员
    for a_name in a_name_array:
        name_url[a_name['title']] = base_url + a_name['href']
        peopleNum += 1
        print(a_name['title']base_url + a_name['href'])

xml_name_root = ET.Element('people')
xml_people_root = ET.Element('people')

count = 0

for name in name_url:
    person_abs_url = name_url[name]
    # 将所有演员姓名保存到xml中
    xml_name = ET.SubElement(xml_name_root'name')
    xml_name.text = name

    if count <= 1000:
        # 将演员姓名,url,介绍放在xml中
        response = requests.get(person_abs_url)
        soup = BeautifulSoup(response.text'html.parser')
        xml_person = ET.SubElement(xml_people_root'person')
        xml_name = ET.SubElement(xml_person'name')
        xml_name.text = name
        xml_url = ET.SubElement(xml_person'url')
        xml_url.text = person_abs_url
        xml_dis = ET.SubElement(xml_person'dis')

        # 去掉网页中“活动年表”以后的文字
        import re
        try:
            all_text = soup.find('div'id='article').table.text.strip()
            useful_text = re.compile('活动年表.*').sub(''all_text)
            xml_dis.text = useful_text
            count += 1
            print('抓取了第'count'个演员'name'的信息')
        except:
          pass

tree_name = ET.ElementTree(xml_name_root)
f = open('E:/name.xml''wb')
tree_name.write(f)
f.close()

tree_people = ET.ElementTree(xml_people_root)
f = open('E:/discription.xml''wb')
tree_people.write(f)
f.close()
版权声明:欢迎交流讨论,转载请注明出处

相关文章推荐

requests+BeautifulSoup爬虫示例程序

import requests from bs4 import BeautifulSoup try: import xml.etree.cElementTree as ET except Im...

【Arduino官方教程第一辑】示例程序 5-2 For循环迭代(霹雳游侠)

你可能经常需要对一系列引脚进行迭代,来实现对这些引脚逐个进行操作。例如:本例中使用for循环来让连接到Arduino/Genuino板2-7号引脚的6个LED逐个、来回地点亮、熄灭(开始由2-7,后来...

在Visual Studio命令提示符界面下编译链接OpenSSL自带的示例程序

注意:本文的内容不是介绍如何在Windows下编译OpenSSL,而是编译好以后,如何在Windows命令提示符界面下编译链接OpenSSL自带的一个示例程序base64.c。 以前已经把下...
  • henter
  • henter
  • 2013年01月24日 17:47
  • 5436

图解C# 调用Win32 API 示例程序

先上代码;相关函数不解释;网上比较容易查到; using System; using System.Collections.Generic; using System.ComponentModel; ...

【Arduino官方教程第一辑】示例程序 1-1 读取模拟信号、串口操作

这个例子将向你展示如何读取真实世界中的模拟信号(Analog Read)。

hadoop学习-mahout-Bayes分类算法示例程序

首先在运行贝叶斯算法程序之前,运行环境要求: 1、安装maven(书中没提到的) 2、安装mahout 3、安装hadoop 关于2,3的安装方式可以参考书本里或者网上的方法。 下面说说安装...

Android 开机自启动示例程序

Android 开机自启动示例程序。使用广播方式接受,采用Android自带存储SharedPreferences存储开机自启动的设置。 本文源码:点击 1、先加上权限 2、需要...

socket通信示例程序

简单socket通信的服务器端程序如下:#include #include #include #include #include #include #include #include #include...

【Arduino官方教程第一辑】示例程序 3-7 信号平滑

本例不断的读取模拟信号值,计算一段时间的平均值,并且将平均值输出到电脑。本例所展示的方法能够平滑飘忽不定或忽上忽下的传感器的模拟信号值。例子中也展示了使用数组存储数据的方法...

单点登录cas综述之cas4.2.7服务端+cas客户端+示例程序+环境搭建说明-陈杰

一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。单点登录cas综述之cas4.2.7服务端+cas客户端+示例程序+环境搭建说明-陈杰。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:爬虫示例程序
举报原因:
原因补充:

(最多只允许输入30个字)