用selenium 自动爬取某一本小说章节及其内容,并存入数据库中

摘要:
1来自selenium importwebdriver2importpymysql3来自seleniun。webdriver。支持uiimportWebDriverWait#等待来自selenium的4。webdriver。supportimportedexpected_ conditionsasec#等待selenium的条件5。webdriver。常见的拜因波
用selenium 自动爬取某一本小说章节及其内容,并存入数据库中第1张用selenium 自动爬取某一本小说章节及其内容,并存入数据库中第2张
 1 from selenium import webdriver
 2 import pymysql
 3 from selenium.webdriver.support.ui import WebDriverWait     # 等待
 4 from selenium.webdriver.support import expected_conditions as ec # 等待条件
 5 from selenium.webdriver.common.by import By
 6 import html
 7 import _thread
 8 from selenium.webdriver.chrome.options import Options
 9 
10 def ceil(x, y):
11     if x % y == 0:              # 相除后为整数
12         return int(x / y)
13     else:                       # 相除有小数
14         return int(x / y) + 1
15 
16 
17 
18 
19 # 创建一个浏览器
20 chrome_options = Options()
21 chrome_options.add_argument('--headless')
22 dr = webdriver.Chrome(chrome_options=chrome_options)
23 
24 # 设置访问的网站
25 dr.get('https://doupocangqiong1.com/1/list_piaotian/')
26 
27 # 获取所有的a标签
28 a = dr.find_elements_by_css_selector('.dirlist > li > a')
29 
30 # 连接数据库
31 db = pymysql.connect("localhost", "root", "root", "selenium", charset='utf8')
32 # 获取游标
33 cursor = db.cursor()
34 
35 for i in a:
36     name = i.text
37     href = i.get_attribute('href')
38     sql = "INSERT INTO novel (name,href,content) VALUES ('%s','%s','%s')"%(name,href,'')
39     cursor.execute(sql)         # 使用execute方法执行SQL语句
40     db.commit()
41 dr.close()          # 关闭浏览器
42 
43 
44 
45 def line(lineName, start, count):
46     dr = webdriver.Chrome(chrome_options=chrome_options)         # 创建一个浏览器
47     # 连接数据库
48     db = pymysql.connect("localhost", "root", "root", "selenium", charset='utf8')
49     # 获取游标
50     cursor = db.cursor()
51 
52     sql = "SELECT id,href FROM novel LIMIT %s, %s"%(start, count)
53     cursor.execute(sql)  # 使用execute方法执行SQL语句
54     data = cursor.fetchall()  # 使用 fetchall() 方法获取所有数据
55     for i in data:
56         dr.get(i[1])
57         # 放置等待
58         WebDriverWait(dr, 5, 0.1).until_not(ec.text_to_be_present_in_element((By.CSS_SELECTOR, '#chaptercontent'),
59                                                                             U'正在转码,请稍后......'))  # 等待dr浏览器10秒钟,每0.1秒钟问一次
60         content = html.escape(dr.find_element_by_css_selector('#chaptercontent').text)
61         # escape()将特殊字符转为特殊的编码格式,unescape()将编码格式转回特殊字符
62         sql = "UPDATE novel SET content = '%s' WHERE id = %s" % (content, i[0])
63         cursor.execute(sql)  # 使用execute方法执行SQL语句
64         db.commit()
65         print(lineName, '完成了', i[0], '的采集')
66     dr.close()          # 关闭窗口
67     dr.quit()           # 关闭浏览器
68     cursor.close()
69     db.close()
70     print(lineName, '完成了采集')
71 
72 
73 def productLine(func, total, lineCount):
74     every = ceil(total[0][0], lineCount)
75     print('every', every)
76     for i in range(lineCount):
77         print('-------------', i)
78         print(_thread.start_new_thread(func, ('line-' + str(i) + '', i * every, every)))
79 
80 
81 try:
82     sql = 'SELECT COUNT(*) FROM novel'
83     cursor.execute(sql)  # 使用execute方法执行SQL语句
84     total = cursor.fetchall()  # 使用 fetchall() 方法获取所有数据
85     print(total)
86 
87     productLine(line, total, 5)
88 
89 except:
90     print ("Error: unable to start thread")
91 
92 
93 while 1:
94    pass
View Code

免责声明:文章转载自《用selenium 自动爬取某一本小说章节及其内容,并存入数据库中》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇libgdx引擎android游戏开发(三)第一百八十节,jQuery-UI,知问前端--消息提示 UI下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Selenium3+python3自动化(四十一)--Chrome浏览器静默模式启动(headless)

前言 Chrome浏览器可以实现静默模式,在电脑上不显示页面,也能实现自动化测试。 小编环境: python 3.7 selenium 3.141.0 Chrome浏览器 84.0.4147.135 chromedriver    84.0.4147.30 headless 1.启动浏览器的时候不想看到浏览器运行,那就加载浏览器的静默模式,让它在后台偷偷运...

Appium之长按元素

app中长按操作是经常遇到的场景,如微信中长按某一对话框,则可删除该对话框;如淘宝-》购物车中长按商品信息,则可删除该商品等。 长按某个元素或者某个点,我们可以使用TouchAction类中提供的 long_press 函数操作。 from appium import webdriver from selenium.webdriver.support.ui...

selenium---上传文件(非input标签)

前言   在前面介绍过selenium中的上传操作过程中介绍了,上传分为两种一种为input标签的,另一种为非input标签的,input标签的直接通过send_keys直接将需要上传的文件地址输入即可 非input标签上传 安静这里找到了一个关于非input标签的上传实例,然后通过pywinauto这个第三方库控制Windows控件进行完成上传操作 p...

《手把手教你》系列技巧篇(四十四)java+ selenium自动化测试处理https 安全问题或者非信任站点下篇(详解教程) 北京

1.简介     这一篇宏哥主要介绍webdriver在IE、Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打开不安全的链接。举例来说,想必大家都应该用过前几年的12306网站购票,点击新版购票,是不是会出现如下的界面。宏哥又找了一个https的页面,如下图所示:...

webDriver运行过程中遇到的问题

1.org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms.  【原因】:     selenium的版本和firefox的版本不兼容  【解决方法】:        更新seleni...

Selenium之表格的定位

前言 浏览器网页常常会包含各类表格,自动化测试工程师可能会经常操作表格中的行,列以及某些特定的单元格,因此熟练掌握表格的定位方法是自动化测试实施过程中必要的技能。 被测试网页的HTML代码 <!DOCTYPE html> <html> <body> <meta charset="UTF-8">...