(一)抓取网页的三种形式
1.抓取静态网页数据,只需要遍历url就可获取各网页的数据。比如:
2.抓取动态网页数据就是获取json格式数据,因此只需要遍历json数据对应的url从而获取json数据。比如:
3.对于一些静态网页请求参数加密或请求参数过多,为了获取网页数据往往使用Selenium自动化测试工具获取网页源码,再解析网页获取数据。这样我们无需构造url请求参数就可获取网页数据。
(二)JS处理滚动条问题
1、滚动条回到顶部:
js=“var q=document.getElementById(‘id’).scrollTop=0”
driver.execute_script(js)
或者
js=“var q=document.documentElement.scrollTop=0”
driver.execute_script(js)
2、滚动条拉到底部:
js=“var q=document.getElementById(‘id’).scrollTop=10000”
driver.execute_script(js)
或者
js=“var q=document.documentElement.scrollTop=10000”
driver.execute_script(js)
3、滚动条拉到指定位置(具体元素):
target = driver.find_element_by_id(“id_keypair”)
driver.execute_script(“arguments[0].scrollIntoView();”, target)
4、通过模拟键盘DOWN(↓)来拖动:
driver.find_element_by_id(“id”).send_keys(Keys.DOWN)
5、scrollTo函数
–scrollHeight 获取对象的滚动高度。
–scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
–scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
–scrollWidth 获取对象的滚动宽度。
(三)使用Selenium获取斗鱼直播所有主播的信息
代码如下:
import unittest
import time
from selenium import webdriver
from bs4 import BeautifulSoup
class douyuSelenium(unittest.TestCase):
#1.创建浏览器驱动对象
def setUp(self):
self.driver = webdriver.Chrome("F:\Chrome\ChromeDriver\chromedriver")
#2.具体的测试用例方法,一定要以test开头
def testDouyu(self):
self.driver.get('http://www.douyu.com/directory/all')
time.sleep(5)
while True:
#3.指定xml解析
soup = BeautifulSoup(self.driver.page_source, 'xml')
#4返回当前页面所有房间标题列表 和 观众人数列表
titles = soup.find_all('h3', {'class': 'ellipsis'})
nums = soup.find_all('span', {'class': 'dy-num fr'})
#5.使用zip()函数来可以把列表合并,并创建一个元组对的列表[(1,2), (3,4)]
for num,title in zip(nums, titles):
print(u"观众人数:" + num.get_text().strip(), u"\t房间标题: " + title.get_text().strip())
#6.page_source.find()未找到内容则返回-1
if self.driver.page_source.find('shark-pager-disable-next')!=-1:
break
#7.就模拟下一页点击,设置页面缓冲时间
time.sleep(5)
self.driver.find_element_by_class_name('shark-pager-next').click()
if __name__ == "__main__":
unittest.main()