python大作业爬虫_python爬虫编程实践 Task4--大作业(某网站新闻爬取)

爬虫作业

用selenium爬取某网站新闻的热点精选

通过chrome的开发者工具,监控网络请求,并分析

用selenium完成爬虫

了解ajax加载

Selenium调用js(execute_script)实现滚动页面

python-selenium提供的execute_script(),可以直接执行js的脚本

当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,这时候只能借助JS了,还好selenium提供了一个操作js的方法

滚动到底部:window.scrollTo(0,document.body.scrollHeight)

滚动到顶部:window.scrollTo(0,0)

说明:window.scrollTo()方法用于设置浏览器窗口滚动条的水平位置和垂直位置,第一个参数表示水平左边距,第二个参数表示垂直上边距。

1.window:js的window对象

2.scrollTo():window的方法,可以滚到页面的任何位置

scrollHeight:是dom元素的通用属性,document.body.scrollHeight会返回body元素的高度,基本上就是页面的高度

scrollLeft:获取位于对象左边界和窗口目前可见内容的最左端之间的距离

scrollTop:获取位于对象最顶端和窗口中可见内容的最顶端之间的距离

scrollWidth:获取对象滚动的宽度

3.用法:execute_script方法可以调用原生JavaScript的api

driver.execute_script(js)

#通过JavaScript设置浏览器窗口的滚动条位置

js = "window.scrollTo(0,document.body.scrollHeight);" #滚动到浏览器底部

js = "window.scrollTo(0,document.body.scrollTop=0);" #滚动到顶部

window.scrollX 返回文档/页面水平方向滚动的像素值

import time

from selenium import webdriver

driver=webdriver.Chrome()

driver.get("网站链接")

#了解ajax加载

for i in range(1,100):

time.sleep(2) #等待几秒查看滚动条是否下滑

driver.execute_script("window.scrollTo(window.scrollX, %d);"%(i*200))

#执行js,使滚动条下滑至要定位的元素位置

# execute_script(),可以直接执行js的脚本

from bs4 import BeautifulSoup

html=driver.page_source # selenium 的 page_source 可以获取到页面源码

bsObj=BeautifulSoup(html,"lxml") # 为什么这里用lxml解析?使用lxml作为解析器,效率更高

jxtits=bsObj.find_all("div",{"class":"jx-tit"})[0].find_next_sibling().find_all("li")

这里需要注意的一点是:fand_all()后面需要加[0]或其他[ ],否则find_next_sibling不能调用,会出现以下错误:

AttributeError: ResultSet object has no attribute ‘find_next_sibling’. You’re probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?

print("index",",","title",",","url")

# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

for i,jxtit in enumerate(jxtits):

# print(jxtit)

try:

text=jxtit.find_all("img")[0]["alt"]

except:

text=jxtit.find_all("div",{"class":"lazyload-placeholder"})[0].text

try:

url=jxtit.find_all("a")[0]["href"]

except:

print(jxtit)

print(i+1,",",text,",",url)

原文链接:https://blog.csdn.net/zjhbeautiful/article/details/105800433

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值