python在手机使用webdriver.chromns_Python爬虫selenium的使用实例爬取知乎首页数据!...

如果调用有问题,假如使用谷歌那也许下载谷歌的chromdriver版本对应不上谷歌内核版本,此坑已踩

import sys

def get_driver():

platform = sys.platform

if (platform.startswith('win32')):

return r'./drives/chromedriver.exe'

elif (platform.startswith('darwin')):

return r'./drives/chromedriver_mac64'

else:

return r'./drives/chromedriver_linux64'

browser =webdriver.Chrome(executable_path=get_driver()) #调用Chrome 驱动,生成浏览器对象

测试安装成功与否(此处使用的是谷歌)

from selenium import webdriver

browser=webdriver.Chrome()

browser.get('http://www.7z72.com/')

3.元素定位

根据Id定位

driver.find_element_by_id('box')

返回第一个id属性匹配的元素,如果没有元素匹配,会抛出 NoSuchElementException 异常

根据Name定位

driver.find_element_by_name("username")

返回第一个name属性匹配的元素, 如果没有元素匹配,会抛出 NoSuchElementException 异常

XPath定位 Xpath学习

#id是box的div元素

driver.find_element_by_xpath("//div[@id=box]")

# from下的所有input元素中name是username的子元素

driver.find_element_by_xpath("//from[input/@name='username']")

# id是loginForm的from元素下的第一个input

driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")

# name是username的input元素

driver.find_element_by_xpath("//input[@name='username']")

# type是button并且name是btn的input元素

driver.find_element_by_xpath("//input[@name='btn'][@type='button']")

# id是box的from元素下的第4个input

driver.find_element_by_xpath("//form[@id='box']/input[4]")

使用Xpath可以对页面元素进行觉得定位和相对定位。

链接文本定位超链接

driver.find_element_by_link_text("测试") # 通过完整超链接定位

driver.find_element_by_link_text("www.7Z72.com")

driver.find_element_by_partial_link_text("hao") # 通过部分链接定位

driver.find_element_by_partial_link_text("7z72")

返回第一个文本属性匹配的链接, 如果没有元素匹配,会抛出 NoSuchElementException 异常

根据标签名定位

driver.find_element_by_tag_name('span')

class定位

driver.find_element_by_class_name('text_list')

只返回匹配的第一个,无元素匹配,会抛出 NoSuchElementException 异常

css选择器定位

driver.find_element_by_css_selector('div>span.text')

寻找多个元素(下列方法会返回一个list)

find_elements_by_name

find_elements_by_xpath

find_elements_by_link_text

find_elements_by_partial_link_text

find_elements_by_tag_name

find_elements_by_class_name

find_elements_by_css_selector

私有方法: find_element和 find_elements

from selenium.webdriver.common.by import By

driver.find_element(By.XPATH,'//button[text()="Some Text"]')

driver.find_elements(By.XPATH,'//button')

Bu类属性:

XPATH = "xpath"

LINK_TEXT = "link text"

PARTIAL_LINK_TEXT = "partial link text"

NAME = "name"

TAG_NAME = "tag_name"

CLASS_NAME = "class name"

CSS_SELECTOR = "css selector"

4.爬取知乎首页文章列表实例

因为查看不了源码(所以实例没有使用解析源码来获取数据),以及爬取json不是最新数据并且只有几条,只能学到此方法

爬取,如果有更多好办法爬取看不到源码的以及数据源有限制的可以交流学习。

该网址数据是页面下拉就会加载数据只需要修改模拟下拉前后时间既可拉取更多数据。如果不设置也就只能拉取固定的几条。

from selenium import webdriver #驱动浏览器

import sys

import time

from selenium.common.exceptions import NoSuchElementException # 定位不到元素错误处理

import json

from fake_useragent import UserAgent

# 随机获取User_Agent

def get_fake_User_Agent ():

ua = UserAgent()

user_anget = ua.random

return user_anget

headers = {

'User-Agent': get_fake_User_Agent()

}

# 识别系统调出chromedriver所在路径

def get_driver():

platform = sys.platform

if ( platform.startswith('win32') ):

return r'./drives/chromedriver.exe'

elif ( platform.startswith('darwin') ):

return r'./drives/chromedriver_mac64'

else:

return r'./drives/chromedriver_linux64'

browser = webdriver.Chrome(executable_path=get_driver()) # 调用Chrome 驱动,生成浏览器对象

try:

browser.get('https://juejin.im/',headers=headers)

time.sleep(5)

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') # 模拟下拉

time.sleep(2)

items_list = browser.find_elements_by_xpath('//*[@id="juejin"]/div[2]/main/div/div/div/div/div/div/ul/div/li')

result = []

for t in items_list:

data_list = t.text

try:

if t.find_element_by_css_selector(".action-list").text :

data_name = t.find_element_by_css_selector(".user-popover-box").text

data_title = t.find_element_by_css_selector(".title").text

if t.find_element_by_css_selector(".item.like.clickable").text == "":

data_like = 0

else:

data_like = t.find_element_by_css_selector(".item.like.clickable").text

if t.find_element_by_css_selector(".item.comment.clickable").text == "":

data_dislike = 0

else:

data_dislike = t.find_element_by_css_selector(".item.comment.clickable").text

data_link = t.find_element_by_css_selector(".info-row.title-row a").get_attribute("href")

one = {}

one["data_name"] = data_name

one["data_title"] = data_title

one["data_like"] = data_like

one["data_dislike"] = data_dislike

one["data_link"] = data_link

result.append(one)

except NoSuchElementException:

print("没有找到元素!")

print('数据下载完毕')

with open('666666.json', 'w', encoding='utf-8') as file:

file.write(json.dumps(result, indent=2, ensure_ascii=False))

finally:

browser.close()

得到的数据结果

此文仅供参考学习的简单代码没有其他博主的深入,小白即可入手,如有错误请指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值