热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:爬取简书

本文由编程笔记#小编为大家整理,主要介绍了爬取简书相关的知识,希望对你有一定的参考价值。爬取简书思路:1)使用selenium模拟浏览器打开网页
本文由编程笔记#小编为大家整理,主要介绍了爬取简书相关的知识,希望对你有一定的参考价值。


爬取简书思路:

1)使用selenium模拟浏览器打开网页
2)由于分页是通过点击【阅读更多】按钮来加载数据的,因此需要模拟单击该按钮
3)确定要爬取多少页的数据,如果要爬取10页的数据,就需要模拟单机10次【阅读更多】按钮
4)单击该按钮后,需要定位这个信息列表元素,然后使用xpath提取数据
5)提取到该数据之后,将它保存到mysql数据库中
第一个错误
技术图片

第二个错误

技术图片


第三个错误
技术图片
附上源码:

1 import time
2 import pymysql
3 from lxml import etree
4 from selenium import webdriver
5
6 # 浏览器操作对象
7 driver = webdriver.Chrome()
8 # 爬取的url
9 driver.get(https://www.jianshu.com/)
10
11
12 # 加载更多
13 def load_mord(num):
14 # 通过观察发现, 打开页面需要鼠标滑动5次才会出现【阅读更多】按钮
15 for i in range(5):
16 js = "var q = document.documentElement.scrollTop = 1000000"
17 driver.execute_script(js)
18 # 休眠 2 秒
19 time.sleep(2)
20 if num == 0:
21 # 休眠 2 秒
22 time.sleep(2)
23 # 定位并单击【阅读更多】按钮加载更多
24 load_more = driver.find_element_by_class_name(load-more)
25 # 点击
26 load_more.click()
27
28
29 def get_html():
30 """获取内容源码"""
31 note_list = driver.find_element_by_class_name(note-list)
32 html = note_list.get_attribute(innerHTML)
33 return html
34
35
36 def extract_data(content_html):
37 """传入内容网页源码,使用Xpath提取信息标题,简介,发布昵称"""
38 html = etree.HTML(content_html)
39 # 标题
40 title_list = html.xpath(//li//a[@class="title"]/text())
41 # 简介
42 abstract_list = html.xpath(//li//p[@class="abstract"]/text())
43 # 昵称
44 nickname_list = html.xpath(//li//a[@class="nickname"]/text())
45
46 data_list = []
47
48 for index, x in enumerate(title_list):
49 item = {}
50
51 item[title] = title_list[index]
52 item[abstract] = abstract_list[index]
53 item[nickname] = nickname_list[index]
54 data_list.append(item)
55 return data_list
56
57
58 def insert_data(sql):
59 # db = pymysql.connect("127.0.0.1", 3306, "root", "python", "xs_db", charset="utf8")
60 # 链接mysql
61 db = pymysql.connect(
62 host=localhost,
63 port=3306,
64 user=root,
65 passwd=python,
66 db=xs_db,
67 charset=utf8
68 )
69 try:
70 cursor = db.cursor()
71 return cursor.execute(sql)
72 except Exception as ex:
73 print(ex)
74 finally:
75 # 数据库提交
76 db.commit()
77 # 关闭数据库
78 db.close()
79
80
81 # 模拟点击2次
82 for x in range(2):
83 print(模拟点击加载更多第{}次.format(str(x)))
84 load_mord(x)
85 time.sleep(1)
86
87 resuts = extract_data(get_html())
88 for item in resuts:
89 # 插入数据
90 sql = "insert into tb_test(title,abstract,nickname) values (‘%s‘,‘%s‘,‘%s‘)" % (
91 item["title"], item["abstract"], item["nickname"])
92 insert_data(sql)


总结:多交流,多操作,多爬取,多思考。



推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 在搜索数据库中的数据时,您可以使用SQL通配符。SQL通配符在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。SQL通配符必须与LIKE运算符 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • Flutter 布局(四) Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
    本文主要介绍Flutter布局中的Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth四种控件,详细介绍了其布局 ... [详细]
author-avatar
冰凌清泽_712
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有