当前位置:   article > 正文

【知识图谱实战学习--[3]】_with open(file_name, 'wt', newline='', encoding='u

with open(file_name, 'wt', newline='', encoding='utf-8') as csvfile1:

提示

1.实践开发过程概述【爬虫技术】
    ·开发环境安装部署
    ·汽车品牌数据获取
    ·汽车车系数据获取
    ·汽车数据批量导入

2.章节收益:    
    ·网络爬虫
        熟悉开源网络爬虫框架的使用方法,掌握动态页面内容的爬取方法
        了解网络爬虫的关键技术
    ·数据导入
        掌握基于Neo4j图形性化操作界面,如何进行批量数据节点的创建,索引的关键、关系的创建
    ·数据资产
        207个汽车品牌数据
        1219个汽车车系数据
        31768个汽车车型数据
        以及掌握网络数据的智能钥匙

学习背景

  • 上课没有好好听,现在跟着bilibili知识图谱实战教程知识图谱实战教程_哔哩哔哩_bilibili补习一下知识记录下;
  • 自己的学习笔记哈~之前记的电子笔记没有找到合适的记录软件;其实自己书写文档的功力还需要磨练,在文章逻辑思路、笔记细节等等都还有欠缺,养成一下学习习惯。


一、实践教程


3.1搭建环境:


    下载requset-html代码结合起来
    开发环境 request-html操作


3.2汽车品牌数据获取


    页面元素分析、品牌数据爬取、数据结构化处理

  •     A:页面元素分析

    网页:汽车之家【汽车报价】2022最新汽车价格_汽车报价大全_汽车之家
​      

  •     B:品牌数据爬取

       在网页上有很多个品牌,去看后面的菜单,可以找到菜单的结构在url列表里面存储了品牌信息。在最右边这里

  

 
        爬取交互页面,就可以根据代码数据的位置获得存储位置
    

 整体代码如下:

  1. from requests_html import HTMLSession
  2. from requests_html import HTML
  3. import requests
  4. import time
  5. import json
  6. import random
  7. import sys
  8. import os
  9. import csv
  10. from fake_useragent import UserAgent
  11. session = HTMLSession()
  12. url = 'https://car.autohome.com.cn/'
  13. #https://car.autohome.com.cn/config/series/3862.html
  14. USER_AGENTS = [
  15. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
  16. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
  17. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
  18. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
  19. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
  20. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
  21. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
  22. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
  23. "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
  24. "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
  25. "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
  26. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
  27. "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
  28. ]
  29. # 品牌列表
  30. def get_bank():
  31. response = session.get(url)
  32. response.html.render()
  33. banks = response.html.find('.cartree ul li h3')
  34. for bank in banks:
  35. #print(bank.text)
  36. #print(bank.html)
  37. bk = bank.text
  38. start = bk.find("(")
  39. end = bk.find(")")
  40. print(bk[0:start])
  41. print(bk[start+1:end])
  42. print(banks)
  43. # 汽车品牌
  44. def get_url():
  45. ##找到当前存储的路径
  46. current_dir = os.path.abspath('.')
  47. print(current_dir)
  48. ##打开存储的csv表格
  49. file_name = os.path.join(current_dir, "data\\bank2.csv")
  50. print(file_name)
  51. ##打开读写csv的管道csvfile1
  52. with open(file_name, 'wt', newline='') as csvfile1:
  53. ##表头
  54. header = ['bank','count', 'url']
  55. writer = csv.writer(csvfile1)
  56. ##传入头部信息
  57. writer.writerow(header)
  58. #访问页面 访问页面元素
  59. response = session.get(url)
  60. response.html.render()
  61. banks = response.html.find('.cartree ul li h3 a')
  62. for bank in banks:
  63. #print(bank.text)
  64. #格式化
  65. bk = bank.text
  66. start = bk.find("(")
  67. end = bk.find(")")
  68. ##品牌数据
  69. bank1 = bk[0:start]
  70. ##车型数据
  71. Num = bk[(start+1):end]
  72. ##数据获取的存储路径
  73. url2 = url + bank.attrs.get("href", None)
  74. print(url2)
  75. save2csc(writer,bank1,Num,url2)
  76. #print(banks)
  77. csvfile1.close()
  78. #
  79. #写入CSV文件
  80. def save2csc(writer,bank,num,url):
  81. header = ['bank','num' 'url']
  82. #writer.writerow(header)
  83. csvrow1 = []
  84. csvrow1.append(bank)
  85. csvrow1.append(num)
  86. csvrow1.append(url)
  87. writer.writerow(csvrow1)
  88. if __name__ == '__main__':
  89. print("开始处理")
  90. get_url()
  91. #get_bank()
  92. print("处理结束")

 代码跑起【撒一部分花】

 但是执行结果有问题,就是并没有获取到数据

二、汽车车系数据获取

  • 元素分析

  1. from requests_html import HTMLSession
  2. from requests_html import HTML
  3. import requests
  4. import time
  5. import json
  6. import random
  7. import sys
  8. import os
  9. import csv
  10. urlroot = "https://car.autohome.com.cn"
  11. #url = 'https://car.autohome.com.cn/price/brand-33.html'
  12. USER_AGENTS = [
  13. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
  14. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
  15. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
  16. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
  17. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
  18. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
  19. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
  20. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
  21. "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
  22. "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
  23. "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
  24. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
  25. "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
  26. ]
  27. # 品牌列表
  28. def get_bank():
  29. current_dir = os.path.abspath('.')
  30. print(current_dir)
  31. file_name1 = os.path.join(current_dir, "data\\type.csv")##存储车系类型
  32. file_name2 = os.path.join(current_dir, "data\\bank.csv")##存储品牌信息
  33. #
  34. with open(file_name1, 'wt',newline='') as csvfile1:
  35. #header = ['bank','Type','Count']
  36. writer = csv.writer(csvfile1)
  37. #writer.writerow(header)
  38. # 读取并获得所有URL地址,同时记录品牌名称
  39. with open(file_name2, 'r') as csvfile2:
  40. reader = csv.reader(csvfile2)
  41. for row in reader:
  42. # 随机浏览器 User-Agent
  43. headers = {"User-Agent": random.choice(USER_AGENTS)}
  44. session = HTMLSession()
  45. # 01:读取整行
  46. column1 = row[0] # 读取第1列
  47. column3 = row[2] #读取第2列
  48. # 逐个URL进行爬取
  49. response = session.get(column3, headers=headers)
  50. response.html.render()
  51. print("URL=",column3)
  52. banks = response.html.find('.cartree ul li dd a')##下载的时候分析的数据结构
  53. for bank in banks:
  54. bk = bank.text
  55. #逆序查找:车系
  56. start = bk.rfind("(")
  57. end = bk.rfind(")")
  58. bank1 = bk[0:start]##品牌数据 奥迪
  59. Num = bk[(start + 1):end]##品牌个数
  60. url2 = urlroot + bank.attrs.get("href", None)
  61. print(column1+" "+bank1 + " " +Num,url2)
  62. ##去除 右边括号
  63. save2csv(writer,column1, bank1.rstrip(), Num,url2)
  64. csvfile1.flush()
  65. print(banks)
  66. time.sleep(1)
  67. #写入CSV文件
  68. def save2csv(writer,bank,type,num,url):
  69. #header = ['bank','num' 'url']
  70. #writer.writerow(header)
  71. csvrow1 = []
  72. csvrow1.append(bank)
  73. csvrow1.append(type)
  74. csvrow1.append(num)
  75. csvrow1.append(url)
  76. try:
  77. writer.writerow(csvrow1)
  78. except IOError:
  79. print("Error: 没有找到文件或读取文件失败")
  80. if __name__ == '__main__':
  81. # get_url()
  82. get_bank()
  83. print("处理结束")

获取的数据仍然是空的 【猜测可能是因为我写的爬取数据的结构不对,新的网站可能更新了布局】

三、使用neo4j 导入数据

  • 品牌数据导入、车系数据导入、关系数据导入neo4j目录下的import 目录

    可以放对应的处理数据:
        ·品牌 csv数据两个表格放到里
        

启动代码:neo4j.bat console

对应网址:http://localhost:7474/ 
        ##品牌数据导入代码:
        LOAD CSV WITH HEADERS FROM "file://bank.csv"AS line
        CREATE(:Bank{name:line.bank,count:line.count})
        会报错:file后面三个/ (window) 一个/是(linux)

neo4j导入.csv文件时常见问题之Neo.ClientError.Statement.ExternalResourceFailed解决方法_Ray Mond的博客-CSDN博客

      如果需要删除节点以及节点图:MATCH (n) DETACH DELETE (n)

        ##车型数据导入代码:
        LOAD CSV WITH HEADERS FROM "file://serise.csv"AS line
        CREATE(p:Serise{name:line.serise,count:line.count})
    

        创建了结构后,结果还是有点问题:就是为什么是数字不是视频展示的汽车类别

  【解决】step1:给bank和type表格增添表头;对应neoj4创建语句的表头

                step2:修改.csv文件的编码格式:用记事本打开,另存为时选择编码方式为utf-8


        ##品牌/车系关系数据导入
        创建品牌和车型之间的关系子类型
        LOAD CSV WITH HEADERS FROM "file:///type.csv"AS line
        MATCH(entity1:Bank{name:line.bank}),(entity2:Serise{name:line.serise})
        CREATE(entity1)-[:Subtype{type:line.relation}]->(entity2)    

         


总结

学习了数据导入和关系创建

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

闽ICP备14008679号