欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python获取51外包网所有投资合作商的公开信息

程序员文章站 2023-11-26 23:04:52
'''python获取51外包网所有投资合作商的公开信息作者:Mac时间:2020.7.1----------------------------------------这种爬虫属于:根据一个网页的url去访问详情页的url,对详情页的源码进行解析并获取想要的数据。对于这种爬虫有一个简单的思路(三步):第一步:先获取一页中(如图1),所有目标链接的url, 然后对这些url进行拼接第二步:尝试解析详情页源代码(如图2),获取详情页中想要的数据第三步:在一个逻辑函数当中循...
'''
python获取51外包网所有投资合作商的公开信息
作者:Mac
时间:2020.7.1
----------------------------------------
这种爬虫属于:
根据一个网页的url去访问详情页的url,
对详情页的源码进行解析并获取想要的数据。
对于这种爬虫有一个简单的思路(三步):
第一步:先获取一页中(如图1),所有目标链接的url,
        然后对这些url进行拼接
第二步:尝试解析详情页源代码(如图2),获取详情页中想要的数据
第三步:在一个逻辑函数当中循环执行第一、二步
'''
import requests
import json
from lxml import etree
import time  # 计算运行的时间

# 基础链接(用作拼接url)
BASE_URL = "http://www.51waibao.net/"
# 要访问的链接(目标链接)
TARGET = "http://www.51waibao.net/Cooperation.aspx"
# 头部信息
HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'
}


# 获取每一个合作商的首页url(第一步)
def get_coos_index_url(page):
    data = {
        "page": page,
    }
    # 使用session方法向网站传递参数,进行访问
    session = requests.session()
    # 传递参数常规写法
    session.post(url=TARGET, data=data, headers=HEADERS)
    # 向目标链接发起请求
    response = requests.get(url=TARGET)
    a_hrefs = response.content.decode()
    # 对网页源码进行解析,获得合作商首页链接
    html = etree.HTML(a_hrefs)
    div_details = html.xpath('//div[@class="xiangmu_item"]')
    hrefs = []
    for div_detail in div_details:
        # 把a标签的href属性的值提取出来,存入一个列表中(拼接url)
        a_href = BASE_URL + div_detail.xpath('.//a/@href')[0]
        hrefs.append(a_href)
    return hrefs
    # print(hrefs)


# 访问合作商首页url,解析并获得合作商的信息(第二步)
def analy_coos_index_url(url):
    response = requests.get(url=url, headers=HEADERS)
    details = response.content.decode()
    html = etree.HTML(details)
    introduces = html.xpath("//div[@class='content_left']")
    coos_info = {}
    # 解析详情页网页源码
    for introduce in introduces:
        title = introduce.xpath(".//h1/text()")
        contact_info = introduce.xpath(".//div[@class='project_info_box']/ul/li//text()")
        introduce_info = introduce.xpath(".//p/text()")
        # 消除简介中的空格(不明白没关系,先记着)
        introduce_info = [x.strip() for x in introduce_info if x.strip() != '']
        coos_info['标题'] = title[0]
        coos_info['联系信息'] = contact_info
        coos_info['简介'] = introduce_info
    return coos_info


# 将信息保存为json文件
def save_as_json(data):
    # ensure_ascii=False 让字符串不以ascii码形式保存,保证中文
    json_str = json.dumps(data, ensure_ascii=False)
    with open('51coos_info.json', 'a') as fp:
        fp.write(json_str)


# 实现逻辑(第三步)
def main():
    # 获得开始的时间
    start = time.time()
    # 输入页码,则可获得相应的页数的数据
    for i in range(114):
        print("第%d页" % (i + 1))
        urls = get_coos_index_url(page=i)
        for url in urls:
            json_data = analy_coos_index_url(url)
            save_as_json(json_data)
    # 获得结束的时间
    end = time.time()
    print("完成!!运行时间:%.2f秒" % (end - start))


if __name__ == '__main__':
    main()

图1如下
python获取51外包网所有投资合作商的公开信息图2如下
python获取51外包网所有投资合作商的公开信息效果图如下:
python获取51外包网所有投资合作商的公开信息

本文地址:https://blog.csdn.net/Mac1392415/article/details/107072463