Python之爬虫-- etree和XPath实战

下面代码是在网站上找到的一个例子,空闲的时候可以自己调试。 

# -*- coding:utf-8 -*-
""" 爬虫 创业邦 创业公司信息爬取
网页url = 'http://www.cyzone.cn/vcompany/list-0-0-1-0-0/0'
爬取页面中的创业公司,融资阶段,创业领域,成立时间和创业公司的链接信息。
使用到requests, json, codecs, lxml等库
requests用于访问页面,获取页面的源代码
josn库用于写入json文件保存到本地
codecs库用于读写文件时编码问题
lxml用于解析网页源代码,获取信息
"""
import requests
import json
import codecs
from lxml import etree
 
 
class chuangYeBang:
    def __init__(self):
        pass
 
    def get_html(self, url):
        """ get_html
        得到网页源代码,返回unicode格式
        
        @param: url
        @return: r.text <type 'unicode'>
        """
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
            "AppleWebKit/537.36 (KHTML, like Gecko)"
            "Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6721.400"
            "QQBrowser/10.2.2243.400"
        }
        r = requests.get(url, headers=headers)
        print r.status_code
        return r.text
 
    def get_company_data(self, text):
        """ get_company_data
        得到网页信息
        eg: [{
            "companyUrl": "http://www.cyzone.cn/r/20180824/68979.html", 
            "stage": "天使轮", 
            "type": "硬件", 
            "time": "2014-12-19", 
            "companyName": "成都思科"
        }]
        @param: text 网页的源代码unicode格式源代码
        @return: list 一个页面所有的公司信息 列表中每一个元素为存入信息的字典
        """
        html = etree.HTML(text)  # 解析网页
        company_name_list = html.xpath(
            '//td[@class="table-company-tit"]/a/span/text()'
            )
        # 得到带有class"table-company-tit"...属性的td标签下的a标签下的span标签的内容,返回为一个列表
        print company_name_list  # get companyName list
        print len(company_name_list)
 
        company_url_list = html.xpath(
            '//td[@class="table-company-tit"]/a/@href'
            )
        """
        得到带有..属性的td标签下的a标签中hred的内容
        为一个url
        <a href="http://www.cyzone.cn/r/20180823/68963.html" target="_blank">
        """
        print company_url_list
 
        stage_list = html.xpath('//td[@class="table-stage"]/@data-stage')
        # 同上 不解释了 得到stage
        company_stage_list = []
        for company_stage in stage_list:
            company_stage = company_stage.strip(',') if company_stage else None
            company_stage_list.append(company_stage)
        print company_stage_list  # get stage list
        print len(company_stage_list)
 
        company_type_list = html.xpath('//td[@class="table-type"]')
        type_list = []
        for company_type in company_type_list:
            company_type = company_type.xpath('./a/text()')[0] \
                if company_type.xpath('./a/text()') else None
            type_list.append(company_type)
        print type_list
        print len(type_list)
 
        company_time_list = html.xpath('//td[@class="table-time"]/text()')
        print company_time_list
        print len(company_time_list)
 
        """
        遍历每个列表,取出列表对应的元素,组成我们需要的字典
        """
        ret_company_list = []
        for i in range(20):
            single_company = {}
            single_company['companyUrl'] = company_url_list[i]
            single_company['companyName'] = company_name_list[i]
            single_company['type'] = type_list[i]
            single_company['stage'] = company_stage_list[i]
            single_company['time'] = company_time_list[i]
            ret_company_list.append(single_company)
 
        return ret_company_list
 
    def write_in_json(self, data):
        """ write_in_json
        写入json文件
        codecs  # 用于编码,同一用utf-8格式编码
        json.dumps  # 方法用于将字典或者列表转换成json字符串格式,存入json文件
        indent=2  # json文件中显示的方法,显示为2字符的锁紧
        .decode('unicode_escape')  # 在json文件中显示中文,不会显示utf-8编码,方便看。
        """
        json_data = json.dumps(data, indent=2).decode('unicode_escape')
        with codecs.open('./chuangYeBang.json', 'w', 'utf-8') as fw:
            fw.write(json_data)
 
 
class getCompanyInfo:
    """ 得到每个公司详细信息 """
    def __init__(self):
        pass
 
    def get_html_text(self, url):
        headers = {}
        r = requests.get(url, headers=headers)
        print r.status_code
        return r.text
 
    def get_company_info(self, text):
        pass
 
 
if __name__ == "__main__":
    cyb = chuangYeBang()
    url = 'http://www.cyzone.cn/vcompany/list-0-0-1-0-0/0'
    text = cyb.get_html(url)
    data = cyb.get_company_data(text)
    cyb.write_in_json(data)

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Python进行爬虫时,XPath是一种非常有用的工具,可以帮助您从HTML或XML文档中提取所需的数据。以下是一个简单的示例,演示如何使用PythonXPath进行爬虫实战: 首先,您需要安装必要的库。在Python中,您可以使用`lxml`库来解析HTML或XML文档,并使用`requests`库发送HTTP请求。您可以使用以下命令来安装它们: ```python pip install lxml pip install requests ``` 接下来,我们将使用`requests`库发送HTTP请求,并使用`lxml`库解析返回的HTML内容。以下是一个示例代码: ```python import requests from lxml import etree # 发送HTTP请求并获取页面内容 url = 'https://example.com' # 替换为您要爬取的网页地址 response = requests.get(url) content = response.content # 使用lxml解析HTML内容 html = etree.HTML(content) # 使用XPath提取所需的数据 data = html.xpath('//div[@class="example-class"]/text()') # 替换为您要提取数据的XPath表达式 # 打印提取的数据 for d in data: print(d) ``` 在上述示例中,我们首先发送HTTP请求并获取网页的内容。然后,我们使用`etree.HTML()`函数将内容转换为可解析的HTML对象。接下来,我们使用XPath表达式`'//div[@class="example-class"]/text()'`来提取具有`class`属性为`example-class`的`div`元素的文本内容。您可以根据实际情况调整XPath表达式以匹配您要提取的数据。 注意:在实际使用中,您可能还需要处理页面的反爬机制、处理异常情况和使用循环遍历多个页面等。此示例仅为演示基本的Python爬虫XPath使用方法。 希望这可以帮助到您!如有任何问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值