码迷,mamicode.com
首页 > 其他好文 > 详细

爬取简书

时间:2020-05-19 20:19:19      阅读:48      评论:0      收藏:0      [点我收藏+]

标签:def   mat   XML   提交   单机   values   final   思考   定位   

爬取简书思路:

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)


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


爬取简书

标签:def   mat   XML   提交   单机   values   final   思考   定位   

原文地址:https://www.cnblogs.com/wutongluo/p/12918906.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!