今日の内容:
セレンの残りの部分
2 BeautifulSoup4
残りの部分のセレン
1.インターワーキングエレメント:
- 、クリックして削除
をクリック
クリア
- ActionChains
ドライバが通過するためにそれを駆動する必要があり、アクション・オブジェクトの連鎖です。
アクションチェーンの目的は、良好な動作を設定するために一連のアクションを操作することができます。
- IFRAMEスイッチング
driver.switch_to.frame( 'iframeResult')
- JSコード実行
execute_script()
クロールJingdongの製品情報
主なバージョン#:
#!タンクから
# '' '
#インポート時間
#インポートセレンwebdriverをするから
#selenium.webdriver.common.keysからインポートキー
#
#=ドライバwebdriver.Chrome()
#
#= 1 NUMの。
#の
#試し:
# driver.implicitly_wait(10)
は##のJingdongの送信要求に
#のdriver.get( 'https://www.jd.com/')
#
マーフィーの法則には##のJingdongはホームの入力ボックス、およびEnterキーを押して入力します
。#input_tag =をdriver.find_element_by_id( 'キー')
#1 input_tag.send_keys( 'マーフィーの法則')
#1 input_tag.send_keys(Keys.ENTER)
#
#time.sleep(5) ##
#good_list = driver.find_elements_by_class_name( 'GL-項目' )のためのgood_listグッドで#:
印刷は##(グッド)
の##製品名
#good_name = good.find_element_by_css_selector(」。P-名EM ')。テキスト
は##印刷(good_name)
#
は##のプロダクトリンク
#good_url = good.find_element_by_css_selector('。P -name A ')。GET_ATTRIBUTE('のhref ')
の##印刷(good_url)
#
は##の商品価格
#good_price = good.find_element_by_class_name('。価格-P「)。テキスト
##を印刷(good_price)
#
##製品評価
#good_commit = good.find_element_by_class_name( 'コミット-P')テキスト。
#
#good_content = F '' '
#1 NUM:NUM} {
#製品名:good_name} {
#製品リンク:{} good_url
#製品価格:good_price} {
#製品評価:good_commit} {
#\ N-
'# '' #
#
印刷(good_content)
#1
(。jd.txt '' A 'エンコード=' UTF-8「)を開くと#' F AS:
#1 f.write(good_content)
#= NUM + 1つの。
#
#印刷( '正常に書き込まれた製品情報!') #
#
#
最後に:
#1 driver.close()
'' '
中級EDITION
'''
#インポート時間
webdriverをするから#インポートセレン
selenium.webdriver.common.keysから#インポートキー
#
()#=ドライバwebdriver.Chrome
#
。#= 1 NUMの
#1
:#試し
#1 driver.implicitly_wait( 10)
##リクエストJingdongのを送信するために
#driver.get( 'https://www.jd.com/')
#
マーフィーの法則には##のJingdongはホームの入力ボックスに、と入力し、Enterキーを押します
(#input_tag = driver.find_element_by_id 'キー')
#1 input_tag.send_keys( 'マーフィーの法則')
#1 input_tag.send_keys(Keys.ENTER)
#
#time.sleep(5)
#1
##ドロップダウンスライド5000px
#1 js_code = '' '
#window.scrollToは(0 5000)
#'''
#
Driver.execute_script#(js_code)
#1
の##は、データロードの製品のために5秒待って
(5)#time.sleep
#
#= good_list driver.find_elements_by_class_name( 'GL-項目')
:こだわりgood_listで#
は##印刷(グッド)
##製品名
#good_name = good.find_element_by_css_selector( 'P-名EM ')。テキスト
##印刷(good_name)
#
##製品リンク
#good_url = good.find_element_by_css_selector('。のp -nameのA')。GET_ATTRIBUTE ( 'のhref')
##印刷(good_url)
#1
の##の商品価格
#good_price = good.find_element_by_class_name( '価格-P')。テキスト
##を印刷(good_price)
#1
の##の製品レビュー
Good.find_element_by_class_name good_commit =#( 'コミット-P')テキスト。
#
#Good_content = F '' '
#1 NUM:NUM} {
#製品名:good_name} {
#製品リンク:good_url} {
#商品価格:{good_price}
#製品の評価:good_commit} {
#\ N-
# '' ' #
#
印刷(good_content)
#を
開くと#(' jd.txt '' A 'エンコード=' UTF-8「)、F AS:
#1 f.write (good_content)
#NUM + = 1
#
#印刷( '製品情報が正常に書かれている!')
#
##見つけて、[次へ]をクリックします
。#next_tag = driver.find_element_by_class_name( 'PN-次')
#1 next_tag。クリック()
#の
#のtime.sleep(10)
#
#最後に:
#1 driver.close()
'''
狂暴版
'''
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def get_good(driver):
num = 1
try:
time.sleep(5)
# 下拉滑动5000px
js_code = '''
window.scrollTo(0, 5000)
'''
driver.execute_script(js_code)
# 等待5秒,待商品数据加载
time.sleep(5)
good_list = driver.find_elements_by_class_name('gl-item')
for good in good_list:
# 商品名称
good_name = good.find_element_by_css_selector('.p-name em').text
# 商品链接
good_url = good.find_element_by_css_selector('.p-name a').get_attribute('href')
# 商品价格
good_price = good.find_element_by_class_name('p-price').text
# 商品评价
good_commit = good.find_element_by_class_name('p-commit').text
good_content = f'''
num: {num}
商品名称: {good_name}
商品链接: {good_url}
商品价格: {good_price}
商品评价: {good_commit}
\n
'''
print(good_content)
with open('jd.txt', 'a', encoding='utf-8') as f:
f.write(good_content)
num += 1
print('商品信息写入成功!')
# 找到下一页并点击
next_tag = driver.find_element_by_class_name('pn-next')
next_tag.click()
time.sleep(5)
# 递归调用函数本身
get_good(driver)
finally:
driver.close()
if __name__ == '__main__':
driver = webdriver.Chrome()
try:
driver.implicitly_wait(10)
# 往京东发送请求
driver.get('https://www.jd.com/')
# 往京东主页输入框输入墨菲定律,按回车键
input_tag = driver.find_element_by_id('key')
input_tag.send_keys('墨菲定律')
input_tag.send_keys(Keys.ENTER)
# 调用获取商品信息函数
get_good(driver)
finally:
driver.close()
bs4搜索文档树
find: 找第一个
find_all: 找所有
标签查找与属性查找:
name 属性匹配
name 标签名
attrs 属性查找匹配
text 文本匹配
标签:
- 字符串过滤器
字符串全局匹配
- 正则过滤器
re模块匹配
- 列表过滤器
列表内的数据匹配
- bool过滤器
True匹配
- 方法过滤器
用于一些要的属性以及不需要的属性查找。
属性:
- class_
- id
'''
html_doc = """
<html><head><title>The Dormouse's story</title></head><body><p class="sister"><b>$37</b></p><p class="story" id="p">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" >Elsie</a><a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>and they lived at the bottom of a well.</p><p class="story">...</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'lxml')
# name 标签名
# attrs 属性查找匹配
# text 文本匹配
# find与find_all搜索文档
'''
字符串过滤器
'''
p = soup.find(name='p')
p_s = soup.find_all(name='p')
print(p)
print(p_s)
# name + attrs
p = soup.find(name='p', attrs={"id": "p"})
print(p)
# name + text
tag = soup.find(name='title', text="The Dormouse's story")
print(tag)
# name + attrs + text
tag = soup.find(name='a', attrs={"class": "sister"}, text="Elsie")
print(tag)
'''
- 正则过滤器
re模块匹配
'''
import re
# name
# 根据re模块匹配带有a的节点
a = soup.find(name=re.compile('a'))
print(a)
a_s = soup.find_all(name=re.compile('a'))
print(a_s)
# attrs
a = soup.find(attrs={"id": re.compile('link')})
print(a)
# - 列表过滤器
# 列表内的数据匹配
print(soup.find(name=['a', 'p', 'html', re.compile('a')]))
print(soup.find_all(name=['a', 'p', 'html', re.compile('a')]))
# - bool过滤器
# True匹配
print(soup.find(name=True, attrs={"id": True}))
# - 方法过滤器
# 用于一些要的属性以及不需要的属性查找。
def have_id_not_class(tag):
# print(tag.name)
if tag.name == 'p' and tag.has_attr("id") and not tag.has_attr("class"):
return tag
# print(soup.find_all(name=函数对象))
print(soup.find_all(name=have_id_not_class))
# 补充知识点:
# id
a = soup.find(id='link2')
print(a)
# class
p = soup.find(class_='sister')
print(p)