当前位置:   article > 正文

xpath的使用方法, 爬虫实例

xpath的使用方法, 爬虫实例
  1. # -*- coding:utf-8 -*-
  2. """ 爬虫 创业邦 创业公司信息爬取
  3. 网页url = 'http://www.cyzone.cn/vcompany/list-0-0-1-0-0/0'
  4. 爬取页面中的创业公司,融资阶段,创业领域,成立时间和创业公司的链接信息。
  5. 使用到requests, json, codecs, lxml等库
  6. requests用于访问页面,获取页面的源代码
  7. josn库用于写入json文件保存到本地
  8. codecs库用于读写文件时编码问题
  9. lxml用于解析网页源代码,获取信息
  10. """
  11. import requests
  12. import json
  13. import codecs
  14. from lxml import etree
  15. class chuangYeBang:
  16. def __init__(self):
  17. pass
  18. def get_html(self, url):
  19. """ get_html
  20. 得到网页源代码,返回unicode格式
  21. @param: url
  22. @return: r.text <type 'unicode'>
  23. """
  24. headers = {
  25. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
  26. "AppleWebKit/537.36 (KHTML, like Gecko)"
  27. "Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6721.400"
  28. "QQBrowser/10.2.2243.400"
  29. }
  30. r = requests.get(url, headers=headers)
  31. print r.status_code
  32. return r.text
  33. def get_company_data(self, text):
  34. """ get_company_data
  35. 得到网页信息
  36. eg: [{
  37. "companyUrl": "http://www.cyzone.cn/r/20180824/68979.html",
  38. "stage": "天使轮",
  39. "type": "硬件",
  40. "time": "2014-12-19",
  41. "companyName": "成都思科"
  42. }]
  43. @param: text 网页的源代码unicode格式源代码
  44. @return: list 一个页面所有的公司信息 列表中每一个元素为存入信息的字典
  45. """
  46. html = etree.HTML(text) # 解析网页
  47. company_name_list = html.xpath(
  48. '//td[@class="table-company-tit"]/a/span/text()'
  49. )
  50. # 得到带有class"table-company-tit"...属性的td标签下的a标签下的span标签的内容,返回为一个列表
  51. print company_name_list # get companyName list
  52. print len(company_name_list)
  53. company_url_list = html.xpath(
  54. '//td[@class="table-company-tit"]/a/@href'
  55. )
  56. """
  57. 得到带有..属性的td标签下的a标签中hred的内容
  58. 为一个url
  59. <a href="http://www.cyzone.cn/r/20180823/68963.html" target="_blank">
  60. """
  61. print company_url_list
  62. stage_list = html.xpath('//td[@class="table-stage"]/@data-stage')
  63. # 同上 不解释了 得到stage
  64. company_stage_list = []
  65. for company_stage in stage_list:
  66. company_stage = company_stage.strip(',') if company_stage else None
  67. company_stage_list.append(company_stage)
  68. print company_stage_list # get stage list
  69. print len(company_stage_list)
  70. company_type_list = html.xpath('//td[@class="table-type"]')
  71. type_list = []
  72. for company_type in company_type_list:
  73. company_type = company_type.xpath('./a/text()')[0] \
  74. if company_type.xpath('./a/text()') else None
  75. type_list.append(company_type)
  76. print type_list
  77. print len(type_list)
  78. company_time_list = html.xpath('//td[@class="table-time"]/text()')
  79. print company_time_list
  80. print len(company_time_list)
  81. """
  82. 遍历每个列表,取出列表对应的元素,组成我们需要的字典
  83. """
  84. ret_company_list = []
  85. for i in range(20):
  86. single_company = {}
  87. single_company['companyUrl'] = company_url_list[i]
  88. single_company['companyName'] = company_name_list[i]
  89. single_company['type'] = type_list[i]
  90. single_company['stage'] = company_stage_list[i]
  91. single_company['time'] = company_time_list[i]
  92. ret_company_list.append(single_company)
  93. return ret_company_list
  94. def write_in_json(self, data):
  95. """ write_in_json
  96. 写入json文件
  97. codecs # 用于编码,同一用utf-8格式编码
  98. json.dumps # 方法用于将字典或者列表转换成json字符串格式,存入json文件
  99. indent=2 # json文件中显示的方法,显示为2字符的锁紧
  100. .decode('unicode_escape') # 在json文件中显示中文,不会显示utf-8编码,方便看。
  101. """
  102. json_data = json.dumps(data, indent=2).decode('unicode_escape')
  103. with codecs.open('./chuangYeBang.json', 'w', 'utf-8') as fw:
  104. fw.write(json_data)
  105. class getCompanyInfo:
  106. """ 得到每个公司详细信息 """
  107. def __init__(self):
  108. pass
  109. def get_html_text(self, url):
  110. headers = {}
  111. r = requests.get(url, headers=headers)
  112. print r.status_code
  113. return r.text
  114. def get_company_info(self, text):
  115. pass
  116. if __name__ == "__main__":
  117. cyb = chuangYeBang()
  118. url = 'http://www.cyzone.cn/vcompany/list-0-0-1-0-0/0'
  119. text = cyb.get_html(url)
  120. data = cyb.get_company_data(text)
  121. cyb.write_in_json(data)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/924364
推荐阅读
相关标签
  

闽ICP备14008679号