首页 > 其他分享 >爬虫三

爬虫三

时间:2023-11-06 21:23:20浏览次数:31  
标签:标签 爬虫 bro soup print div find

搜索文档树

1 、find_all :找所有  列表

2、find  找一个 Tag类的对象

find和find_all

五种过滤器(字符串、正则表达式、列表、True、方法):

字符串

可以按标签名,可以按属性,可以按文本内容

无论按标签名,按属性,按文本内容 都是按字符串形式查找:

 p=soup.find('p')

找到类名叫 story的p标签:

p=soup.find(name='p',class_='story')

可以按标签名,可以按属性,可以按文本内容

obj=soup.find(name='span',text='xxx')

obj=soup.find(href='http://example.com/tillie')

属性可以写成这样

obj=soup.find(attrs={'class':'title'})

正则

无论按标签名,按属性,按文本内容 都是按正则形式查找
找到所有名字以b开头的所有标签

obj=soup.find_all(name=re.compile('^b'))

obj=soup.find_all(name=re.compile('y$'))

obj=soup.find_all(href=re.compile('^http:'))

obj=soup.find_all(text=re.compile('i'))

列表

obj=soup.find_all(name=['p','a'])

obj = soup.find_all(class_=['sister', 'title'])

True

无论按标签名,按属性,按文本内容 都是按布尔形式查找

obj=soup.find_all(id=True)

obj=soup.find_all(href=True)

obj=soup.find_all(name='img',src=True)

方法

无论按标签名,按属性,按文本内容 都是按方法形式查找

def has_class_but_no_id(tag):
  return tag.has_attr('class') and not tag.has_attr('id')

 

爬图片

import requests
from bs4 import BeautifulSoup

import requests
from bs4 import BeautifulSoup

res = requests.get('https://pic.netbian.com/tupian/32518.html')
res.encoding = 'gbk'
# print(res.text)

soup = BeautifulSoup(res.text, 'html.parser')
ul = soup.find('ul', class_='clearfix')
img_list = ul.find_all(name='img', src=True)
for img in img_list:
    try:
        url = img.attrs.get('src')
        if not url.startswith('http'):
            url = 'https://pic.netbian.com' + url
        print(url)
        res1=requests.get(url)
        name=url.split('-')[-1]
        with open('./img/%s'%name,'wb') as f:
            for line in res1.iter_content():
                f.write(line)
    except Exception as e:
        continue

 

bs4其它用法

1、遍历,搜索文档树---》bs4还可以修改xml

java的配置文件一般喜欢用xml写

-.conf

-.ini
-.yaml
-.xml

2、find_all 其他参数

-limit=数字   找几条 ,如果写1 ,就是一条

-recursive

3 、搜索文档树和遍历文档树可以混用,找属性,找文本跟之前学的一样

 

css选择器

id选择器
  #id号

标签选择器

  标签名

类选择器

  .类名

记住的:
#id
.sister
head
div>a # div下直接子节点a
div a # div下子子孙孙节点a

一旦会了css选择器的用法---》以后所有的解析库都可以使用css选择器去找

 

import requests
from bs4 import BeautifulSoup

res = requests.get('https://www.cnblogs.com/liuqingzheng/p/16005896.html')
# print(res.text)
soup = BeautifulSoup(res.text, 'html.parser')
# a=soup.find(name='a',title='下载哔哩哔哩视频')
# print(a.attrs.get('href'))

# p=soup.select('#cnblogs_post_body p:nth-child(2) a:nth-child(5)')[0].attrs.get('href')
# p=soup.select('#cnblogs_post_body > p:nth-child(2) > a:nth-child(5)')[0].attrs.get('href')  # 以后直接复制即可
p=soup.select('a[title="下载哔哩哔哩视频"]')[0].attrs.get('href')  # 以后直接复制即可  复制selector
print(p)

selenium基本使用

这个模块:既能发请求,又能解析,还能执行js

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题

selenium 会做web方向的自动化测试

appnium 会做 app方向的自动化测试

selenium 可以操作浏览器,模拟人的 行为

如何使用:

1、下载浏览器驱动:

https://googlechromelabs.github.io/chrome-for-testing/
https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/119.0.6045.105/win64/chromedriver-win64.zip

跟浏览器型号和版本一一对应的
ie,火狐,谷歌:谷歌为例
谷歌浏览器有很多版本:跟版本一一对应

2、安装 selenium

3、写python代码,操作浏览器

例子(打开浏览器)

import time
    from selenium import webdriver
    # 跟人操作浏览器一样,打开了谷歌浏览器,拿到浏览器对象
    bro=webdriver.Chrome()
    # 在地址栏中输入地址
    bro.get('https://www.baidu.com')
    time.sleep(5)
    bro.close()

  

模拟登录

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

bro = webdriver.Chrome()
bro.get('https://www.baidu.com')
bro.implicitly_wait(10)  # 设置等待---》从页面中找标签,如果找不到,就等待
# 最大化
bro.maximize_window()
# print(bro.page_source) # 当前页面的html内容
# 找到登录按钮--》选择器---》css选择器
# a_login=bro.find_element(by=By.NAME,value='tj_login')
# a_login=bro.find_element(by=By.ID,value='s-top-loginbtn')
a_login = bro.find_element(by=By.LINK_TEXT, value='登录')  # a 标签连接文字
time.sleep(2)
# 点击
a_login.click()

# 找到短信登录 点击
sms_login = bro.find_element(by=By.ID, value='TANGRAM__PSP_11__changeSmsCodeItem')
sms_login.click()
time.sleep(1)
user_login = bro.find_element(by=By.ID, value='TANGRAM__PSP_11__changePwdCodeItem')
user_login.click()
time.sleep(1)
username = bro.find_element(by=By.NAME, value='userName')
# 往输入框中写文字
username.send_keys('[email protected]')
password = bro.find_element(by=By.ID, value='TANGRAM__PSP_11__password')
# 往输入框中写文字
password.send_keys('[email protected]')

agree = bro.find_element(By.ID, 'TANGRAM__PSP_11__isAgree')
agree.click()
time.sleep(1)

submit = bro.find_element(By.ID, 'TANGRAM__PSP_11__submit')
submit.click()

time.sleep(3)
bro.close()

 

selenium其它用法

无头浏览器

如果我们做爬虫,我们只是为了获取数据,不需要非有浏览器在显示---》隐藏浏览器图形化界面

import time

from selenium import webdriver
from selenium.webdriver.common.by import By


from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
bro = webdriver.Chrome(options=chrome_options)


bro.get('https://www.cnblogs.com/liuqingzheng/p/16005896.html')

print(bro.page_source)
time.sleep(3)
bro.close()

 

搜索标签

1、搜索标签

By.ID        # 根据id号查找标签

By.NAME      # 根据name属性查找标签

By.TAG_NAME       # 根据标签查找标签

By.CLASS_NAME     # 按类名找

By.LINK_TEXT       # a标签文字

By.PARTIAL_LINK_TEXT   # a标签文字,模糊匹配

---------以上是selenium 自己的--------

By.CSS_SELECTOR # 按css选择器找

By.XPATH  #按xpath找

 

2 、获取标签的属性,文本,大小,位置

print(tag.get_attribute('src'))

print(tag.id)  # 这个id不是id号,不需要关注

print(tag.location)

print(tag.tag_name)

print(tag.size)

print(div.location) # 在页面中位置: x y轴效果---》
print(div.tag_name) # 标签名
print(div.size) # 标签大小 x y
print(div.text) # 文本内容

 

找到页面中所有div

divs=bro.find_elements(By.TAG_NAME,'div')

按类名找

div=bro.find_element(By.CLASS_NAME,'postDesc').text

按css选择器

div=bro.find_element(By.CSS_SELECTOR,'div.postDesc').text

div=bro.find_element(By.CSS_SELECTOR,'#topics > div > div.postDesc').text

按xpath选择---专门学xpath的语法

div=bro.find_element(By.XPATH,'//*[@id="topics"]/div/div[3]').text

标签:标签,爬虫,bro,soup,print,div,find
From: https://www.cnblogs.com/YeeQX/p/17813760.html

相关文章

  • django+爬虫+钉钉机器人
    Views类urls类Html结果......
  • 利用Ruby网络爬虫库采集文库
    今天我们安装一个Ruby的网络爬虫库叫做Nokogiri,它可以帮助我们解析网页的HTML代码,提取出我们需要的信息。我们可以在终端中使用geminstallnokogiri来进行安装。其次,我们需要使用open-uri库来打开网页,然后使用Nokogiri库来解析HTML代码。以下是具体的代码:```rubyrequ......
  • 爬虫之抓取js生成的数据
    有很多页面,当我们用request发送请求,返回的内容里面并没有页面上显示的数据,主要有两种情况,一是通过ajax异步发送请求,得到响应把数据放入页面中,对于这种情况,我们可以查看关于ajax的请求,然后分析ajax请求路径和响应,拿到想要的数据;另外一种就是js动态加载得到的数据,然后放入页面中。这......
  • 用Rust和Scraper库编写图像爬虫的建议
    本文提供一些有关如何使用Rust和Scraper库编写图像爬虫的一般建议:1、首先,你需要安装Rust和Scraper库。你可以通过Rustup或Cargo来安装Rust,然后使用Cargo来安装Scraper库。2、然后,你可以使用Scraper库的Crawler类来创建一个新的爬虫实例。3、接下来,你可以使用start方法来启动爬虫并......
  • requests库编写的爬虫程序没有那么难!
    下文是用requests库编写的爬虫程序,用于爬取toutiao上的图片。程序使用了代理服务器,代理服务器的地址为duoip,端口号为8000。importrequestsfrombs4importBeautifulSoup#设置代理服务器proxy_host='duoip'proxy_port=8000proxy={'http':'http://'+proxy_host+'......
  • swift语言用哪种库适合做爬虫?
    因为Swift语言并没有在语言层面上支持正则表达式,这对于爬虫来说是一个很大的缺陷。不过,Swift语言可以通过调用其他语言的库来实现爬虫功能,比如可以使用Python的BeautifulSoup库或者JavaScript的Cheerio库来解析HTML页面。但是相比于Python和JavaScript等专门用于爬虫的语言,Swift语......
  • 【爬虫】一次爬取某瓣top电影前250的学习记录
    先贴上爬取的脚本:importrequestsimportreforiinrange(1,11):  num=(i-1)*25  url=f"https://movie.douban.com/top250?start={num}&filter="  head={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KH......
  • 爬虫爬取到标签内容有时为空有时正常,请问怎么解决?
    当爬虫爬取标签内容时,遇到有时为空有时正常的情况,可能是由于以下原因导致的:网站的动态内容:某些网站使用JavaScript来加载页面内容,爬虫在请求页面时可能无法获取到完整的HTML内容。这可能导致一些标签在某些时候为空。解决这个问题,你可以尝试使用Headless浏览器(如Puppeteer)来模拟浏......
  • Casablanca库编写爬虫采集苏宁视频
    昨天我们讲了一个采集苏宁易购视频的程序,有粉丝说有点复杂,那么今天我就用Casablanca库重新编写一个C++爬虫程序,来采集苏宁的视频,这个可更加简单,一起来学习一下吧。代码如下:```cppnamespacehttp=casablanca::http;namespaceio=boost::iostreams;namespacessl=casabl......
  • 爬虫之requests模块
    一、爬虫介绍1、2、二、requests模块1、2、三、携带请求参数1、2、四、url编码和解码1、2、五、携带请求头1、2、六、发送post请求1、2、七、携带cookie1、2、八、响应对象1、2、九、高级用法1、2、......