ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.xpath以及selenium使用

2022-04-16 19:04:17  阅读:183  来源: 互联网

标签:xpath img url 标签 selenium html 使用 div


xpath

处理网页:pip install lxml

from lxml import etree
# 网页的源码
html_doc = resp.content.decode('utf-8')
# 使用etree去转换html_doc,转换成了一个html对象,此时element对象可以使用xpath语法
html = etree.HTML(html_doc)
print(html.xpath("xpath语法")

xpath语法

xpath语法中,[1]就是第一个

# 当前html页面中所有的a标签
//a 

# 当前html页面中所有a标签中的href的属性内容
//a/@href   

# 当前html页面中所有a标签中的文本内容
//a/text()   

# 拿到所有img标签中的src属性的内容
//img/@src   

# 拿到所有a标签下面的所有img标签中的src内容
//a//img/@src   

# 选择img标签中alt是某个值的标签并且提取src值
//img[@alt='猪猪侠之南海日记2']/@src   

# 选取页面中所有div并且class是lst-item的,选择其中第3个,并且在此之下,选择第4个a标签中的img标签的src属性内容
//div[@class='lst-item'][3]/a[4]/img/@src 

# 这里的a标签是选择最后一个
//div[@class='lst-item'][1]/a[last()]/img 

# a标签倒数第二个
//div[@class='lst-item'][1]/a[last()-1]/img

# 查找所有p标签中,文字内容是xxx的
//p[text()='超变武兽第二季'] 
 
# 查找所有p标签中,包含某些文字的
//p[contains(text(),'蜡笔')] 

# 页面中所有p标签凡是带有属性的内容都选出来
//p[@*] 

# 这里的*代表选择所有的元素
//div[@class='lst-item'][2]/* 

# 选择页面中所有class是m-lst的div中的第4个div
//div[@class='m-lst']/div[position()=4] 

爬虫小实战

import requests
from lxml import etree

# 页面内的爬虫
def scrapy(url):
    url = url
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
    }
    resp = requests.get(url=url, headers=headers)
    # 网页的源码
    html_doc = resp.content.decode('utf-8')
    # 使用etree去转换html_doc,转换成了一个html对象,此时element对象可以使用xpath语法
    html = etree.HTML(html_doc)
    dongman_title = html.xpath("//div[@class='u-ct']/p[@class='u-tt']/text()")
    dongman_pic = html.xpath("//div[@class='lst']/a/img/@data-src")
    print(dongman_title)
    print(dongman_pic)

# 发现下一页
def find_next_page(url):
    url = url
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
    }
    resp = requests.get(url=url, headers=headers)
    # 网页的源码
    html_doc = resp.content.decode('utf-8')
    # 使用etree去转换html_doc,转换成了一个html对象,此时element对象可以使用xpath语法
    html = etree.HTML(html_doc)
    # 获得下一页的链接
    next_page = html.xpath("//a[contains(text(),'下一页')]/@href")
    # 创建完整的链接
    really_next_page = "http://www.4399dmw.com" + next_page[0]
    return really_next_page

def main():
    url = "http://www.4399dmw.com/search/dh-1-0-0-0-0-0-0/"
    while True:
        try:
            print("开始爬行url:"+url)
            scrapy(url)
            page_url = find_next_page(url)
            url = page_url
            
        except:
            print("The last page has been done")
            break

if __name__ == '__main__':
    main()

反爬虫

通过User-Agent判断⇒随机生成user-agent反反爬虫

version_id = random.randint(50,120)
os_type = ['Windows NT 10.0','Windows NT 6.1','Linux 10.0']
# 法一:使用+连接
ua = "Mozilla/5.0 ("+random.choice(os_type)+"; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758."+str(version_id)+" Safari/537.36"
# 法二:使用join函数连接
ua = "".join(["Mozilla/5.0 (",random.choice(os_type),"; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.",str(version_id)," Safari/537.36"])

通过Referer判断⇒传入合法的随机的referer

referer = f"http://www.4399dmw.com/search/dh-1-0-0-0-0-{random.randint(1,14)}-0/"

通过Cookie判断⇒建立cookie池(爬虫批量建立多账户)

通过ip⇒使用代理ip等方法

验证码⇒考虑写程序(机器学习,神经网络)识别验证码,打码平台

通过自定义字体⇒

1.有的网站通过审查元素字体无法显示,显示为口⇒考虑使用手机网络访问
2.通过字体偏移(标准字体库和本身字体库有偏移,前端显示使用CSS偏移选择字)⇒找出规律对爬虫修改

selenium

直接控制浏览器的插件,配合各种语言做爬虫

安装:pip install selenium

web自动化测试工具:https://npm.taobao.org

chromedriver:https://vikyd.github.io/download-chromium-history-version/#/

先下载chrome-win.zip,再下载chromedriver_win32.zip

chrome-win为浏览器主程序,同chromedriver解压到python代码同文件夹下

如果调用自己需要chrome版本和chromedriver版本一致

标签:xpath,img,url,标签,selenium,html,使用,div
来源: https://www.cnblogs.com/icui4cu/p/16153842.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有