很早以前刚接触python的时候就知道python可以做爬虫,然后自己就学习了下,再借鉴网上大佬的一些经验,写了这么一篇文章。水平有限还请各位大佬莫要见笑,其中有什么问题,以及可优化的地方,也请大佬们提出来,共同学习一起进步!
这篇文章问两个部分web网页自动化操作和爬虫数据爬取
因为我借鉴大佬的部分是爬虫那一部分,他只能给特定的url来获取相应的数据,我加入了搜索在选择具体的小说的功能,索引加上了web相关的操作
准备相关的库,以及环境
安装 selenium
安装 tqdm https://blog.csdn.net/DU_Python/article/details/109532477 (自卖自夸一手)
安装 BeautifulSoup
下载 chromedriver 下载地址 http://npm.taobao.org/mirrors/chromedriver/ 一般对应你的谷歌浏览器版本下载就好
- 首先打开网站笔趣阁,这里加了属性,使浏览器在后台运行
- 进行web操作,搜索小说将得到的结果存为字典
# _*_ coding=utf-8 _*_
import requests
import time
from tqdm import tqdm
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
def input_novel_name(novel_name):
"""搜索输入的书名,返回一个书名和相应链接的字典"""
# 设置浏览器为后台运行模式
base_url = 'https://www.xsbiquge.com/'
option = webdriver.ChromeOptions()
option.add_argument('headless')
# 以后台运行的方式打开浏览器
browser = webdriver.Chrome(r'C:\Users\Administrator\PycharmProjects\untitled\spider\chromedriver.exe',
options=option) # 括号内第一个参数为Chromedriver的本地位置
# 访问网站
browser.get(base_url)
# 设置隐式等待
wait = WebDriverWait(browser, 20, 0.2)
# web操作的元素定位点
input_locator = (By.XPATH, "//input[@id='keyword']") # 搜索框定位
button_locator = (By.XPATH, "//input[@class='button']") # 搜索按钮定位
e = wait.until(expected_conditions.presence_of_element_located(input_locator)) # 等待元素可见
e.send_keys(novel_name) # 输入小说名
b = wait.until(expected_conditions.element_to_be_clickable(button_locator)) # 等待元素可以点击
b.click()
try:
browser.find_element_by_xpath('//img') # 先做一个判断,看结果页是否包含我们目标页面的元素
link_name = [] # 存储搜索到的书名
link_herf = [] # 书名对应的链接
# 保存整个页面我们需要的内容(每一条结果的title和herf)
for link in browser.find_elements_by_xpath("//a[@class='result-game-item-title-link']"):
link_herf.append(link.get_attribute('href')) # 获取herf属性内容
link_name.appe