当前位置:   article > 正文

python抓取网页内容到excel,python如何抓取网页数据_python爬取网页数据存入excel

python爬取网页数据存入excel

本篇文章给大家谈谈python 爬虫抓取网页数据导出excel,以及python抓取网页数据并写入txt,希望对各位有所帮助,不要忘了收藏本站喔。

Source code download: 本文相关源码


前言

记录一下使用python将网页上的数据写入到excel中


一、使用python爬取网上数据并写入到excel中

要爬取数据的网站:

例子一:

IP.cn - 银行电话 (该网页有5个网页数据)
在这里插入图片描述
更多工具中查看页面源代码:
在这里插入图片描述
找到想要数据的位置
在这里插入图片描述
代码中:
在这里插入图片描述

例子二:

要爬取数据的网站:
全国公共服务电话,常用电话号码大全——电话号码查询网
在这里插入图片描述
页面源代码:
在这里插入图片描述
代码中:
在这里插入图片描述

由于我这边

二、工具类

  1. import datetime
  2. import openpyxl
  3. import requests
  4. from lxml import etree
  5. def get_url_html(url):
  6. """
  7. 定义一个函数, 新建一个空变量html_str, 请求网页获取网页源码,如果请求成功,则返回结果,如果失败则返回空值
  8. url: 入参参数, 指的是我们普通浏览器中的访问网址
  9. """
  10. html_str = ""
  11. try:
  12. """获取网页请求之后,返回的网页源码,类似于在浏览器中右击选择网页源码, 使用三方库etree把网页源码字符串转换成HTML格式"""
  13. r = requests.get(url, timeout=200)
  14. # 该操作为使用网页的编码方式,防止数据乱码
  15. r.encoding = r.apparent_encoding
  16. html_str = etree.HTML(r.text)
  17. except Exception as e:
  18. print(e)
  19. return html_str
  20. # 获取ipcn网站上的数据
  21. def get_ip_cn_data(html_str):
  22. """
  23. 定义一个函数, 新建一个变量pdata_list初始值为空列表(也可以叫空数组), 在网页源码中匹配出每一行的内容
  24. html_str: 入参参数, 指的是网页源码,HTML格式的
  25. """
  26. data_list = []
  27. try:
  28. """查找网页源码中的xpath,找到每一行的位置"""
  29. option = html_str.xpath('//div[@class="layui-card ip_card"]//div[@class="layui-card-body"]/table/tbody[1]//tr')
  30. for op in option:
  31. """根据每一行,匹配出第一列的字符串,比如'2021年10月20日',再通过正则匹配出它的数字部分用'/'隔开,则把字符串转换成2021/10/20"""
  32. # col1 = "/".join(re.findall("\d+", op.xpath("./td[1]/text()")[0]))
  33. """根据每一行,匹配出其他4列的数字字符串,然后通过函数转换,将字符串转换成浮点类型, 获取失败则为空值"""
  34. try:
  35. col1 = str(op.xpath("./td[1]/text()")[0])
  36. except:
  37. col1 = ""
  38. try:
  39. col2 = str(op.xpath("./th/text()")[0])
  40. except:
  41. col2 = ""
  42. data_list.append([col2.strip(), col1.strip()])
  43. except Exception as e:
  44. print(e)
  45. return data_list
  46. # 获取00cha网页上的数据
  47. def get_00cha_data(html_str):
  48. # data_list中的数据为未删除空白行的数据
  49. data_list = []
  50. # not_null_list中的数据为删除空白行后的数据
  51. not_null_list = []
  52. try:
  53. """查找网页源码中的xpath,找到每一行的位置"""
  54. # 根据网页中的源码,确认表格所在的div等数据
  55. option = html_str.xpath('//div[@class="searchnr"]/table//tr')
  56. for op in option:
  57. """根据每一行,匹配出第一列的字符串,比如'2021年10月20日',再通过正则匹配出它的数字部分用'/'隔开,则把字符串转换成2021/10/20"""
  58. # col1 = "/".join(re.findall("\d+", op.xpath("./td[1]/text()")[0]))
  59. """根据每一行,匹配出其他4列的数字字符串,然后通过函数转换,将字符串转换成浮点类型, 获取失败则为空值"""
  60. try:
  61. col1 = str(op.xpath("./td[1]/a/text()")[0])
  62. except:
  63. col1 = ""
  64. try:
  65. col2 = str(op.xpath("./td[2]/text()")[0])
  66. except:
  67. col2 = ""
  68. try:
  69. col3 = str(op.xpath("./td[3]/a/text()")[0])
  70. except:
  71. col3 = ""
  72. try:
  73. col4 = str(op.xpath("./td[4]/text()")[0])
  74. except:
  75. col4 = ""
  76. data_list.append([col1.strip(), col2.strip()])
  77. data_list.append([col3.strip(), col4.strip()])
  78. except Exception as e:
  79. print(e)
  80. for index, value in enumerate(data_list):
  81. if value[1] != '':
  82. if value[0] != '':
  83. not_null_list.append(value)
  84. return not_null_list
  85. def write_excel(file_name, write_list):
  86. """
  87. 定义一个函数, 将每一行的数据汇总的数组,进行遍历,依次写到excel中
  88. file_name: 入参参数, 指的是写入excel的名字
  89. write_list: 入参参数, 指的是写入excel的每一行汇总的数组
  90. """
  91. full_excel = openpyxl.Workbook()
  92. full_sheet = full_excel.active
  93. for i in range(0, len(write_list)):
  94. full_sheet.append(write_list[i])
  95. full_excel.save(file_name)
  96. # 主函数
  97. if __name__ == '__main__':
  98. start_time = datetime.datetime.now()
  99. """
  100. URL的规律是XXXX+当前日期+XXXX+当前页号
  101. """
  102. now_date = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
  103. every_page_result_list = [["pub_phone_number", "pub_phone_desc"]] # 空数组接受每一页的所有数据行汇总数据
  104. compare_result_list = []
  105. """循环每一页获取数据"""
  106. # pages = 78
  107. pages = 1
  108. # 获取urls中的数据
  109. for index in range(1, pages+1):
  110. urls = {"https://ip.cn/yinhang.html" , "https://ip.cn/gonggong.html" , "https://ip.cn/jiudian.html" , "https://ip.cn/kuaidi.html" , "https://ip.cn/waimai.html"}
  111. for url in urls:
  112. every_page_result_list = every_page_result_list + get_ip_cn_data(get_url_html(url))
  113. url = "https://www.00cha.com/tel.htm"
  114. compare_result_list = get_00cha_data(get_url_html(url))
  115. # 去除compare_result_list和every_page_result_list中电话相同的数据
  116. for index2, value2 in enumerate(compare_result_list):
  117. for index3, value3 in enumerate(every_page_result_list):
  118. if value2[0] == value3[0]:
  119. compare_result_list.pop(index2)
  120. every_page_result_list = every_page_result_list + compare_result_list
  121. # 将数据写到指定路径下的csv文件中
  122. write_excel(r"D:\PubTel"+now_date+".csv", every_page_result_list)
  123. end_time = datetime.datetime.now()
  124. print(f"耗时总共{(end_time - start_time).seconds}秒")

总结

由于我这边的业务需要去除两个网站中相同的手机号,所以做了一些处理。java程序员第一次接触python,大家可以根据自己的需求修改里面具体的业务逻辑

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树数据分析Excel文件438880 人正在系统学习中
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/939771
推荐阅读
相关标签
  

闽ICP备14008679号