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

    技术2022-07-11  86

    ''' 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如下 图2如下 效果图如下:

    Processed: 0.017, SQL: 9