python爬虫抓书心得

最近学习了python+selenium 进行元素定位,便练习了爬虫进行抓书。废话也不多说,上代码

from selenium import webdriver
from time import sleep
#_*_ coding:utf-8 _*_
def firefox():
    pass
class firefox():
  try:
        try:
            driver=webdriver.Chrome()
            #如有侵权,立即删除
            driver.get('https://www.23us.so/files/article/html/17/17932/index.html')
            #开始,定义开始结束条件
            a=driver.find_element_by_xpath('//dd/h1').text
            print(a)
            #点击第一章
            c=driver.find_element_by_xpath('//tbody/tr/td[1]/a').text
            print(c)
            driver.find_element_by_xpath('//tbody/tr/td[1]/a').click()
            kongzhi=1
            print("进入成功")
            # 创建文件,这将打开一个用于读写(更新)的文件。
            file = open('e:/' + a + '.txt', 'w+')
            while kongzhi==1:
                    try:
                        #查找章节元素
                        zhangjie=driver.find_element_by_xpath('//dd/h1').text
                        #写入文件
                        file.write(zhangjie)
                        print(zhangjie)
                        #查找内容元素
                        neirou=driver.find_element_by_id('contents').text
                        file.write(neirou)
                        #点击下一页
                        driver.find_element_by_xpath('//div/dl/dd/h3/a[3]').click()
                        # driver.find_element_by_xpath('//div/dl/dd/a[3]').click()
                    except Exception:
                        if a == zhangjie:
                            break
        except Exception as err:
            print('Exception:' + str(err));
        # 关闭写入连接
        file.close()
        print('结束')
  except Exception as err:
      print('Exception:' + str(err));

driver.find_element_by_xpath 进行绝对定位,按照元素的绝对路径。通过层级关系的绝对路径来查找路径,及//相对路径+标签,相对方便,但缺点是路径太长,并且如果页面有变动维护困难
driver.find_element_by_id根据标签id进行定位,但对于没有id的则无法定位
driver.find_element_by_name通过name属性定位,但对于没有name的则无法定位
driver.find_element_by_class_name通过class属性定位,但对于没有class的则无法定位
driver.find_element_by_tag_name通过tag属性定位,因为前端页面会有大量的div,input, a标签。tag 所以很难通过tag name 去区分不同的元素
driver.find_element_by_link_text通过link定位,link定位专门定位文本链接,及文本所在的标签
driver.find_element_by_partial_link_text通过partial link属性定位,partial link定位是对link定位的一种补充有些文本链接会比较长
driver.find_element_by_css_selector 通过css定位,通过css选择器定位元素 .class #id *所有元素 element p定位所有的元素 element > element通过父子关系定位
例如:


#通过id定位元素
# driver.find_element_by_css_selector("#su").click()
#通过class定位元素
# driver.find_element_by_css_selector(".s_btn").click()

#通过父子关系定位元素
# driver.find_element_by_css_selector("span>input").click()

#组合定位
driver.find_element_by_css_selector("form.fm>span>input#su").click()

通过By元素定位
例如:

# 用By元素定位
# driver.find_element(By.ID,"su").click()
# driver.find_element(By.CLASS_NAME,"s_btn").click()

# driver.find_element_by_id("su").click()
#前提是要导入下面的jar包
#from selenium.webdriver.common.by import By

好了,我们下期再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值