各位老铁们好,相信很多人对淘宝网站页面源码分享在哪看都不是特别的了解,因此呢,今天就来为大家分享下关于淘宝网站页面源码分享在哪看以及制作淘宝网页的代码的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
一、selenium简介
如果链接简单,爬虫可以通过链接用requests库提取页面信息,如爬取豆瓣top250影片信息,链接简单易懂。参考:爬取豆瓣top250影片信息
但如果遇到一些搜索之类的,基于js动态加载的网页,以上就不适合,如爬虫b站,搜索“爬虫”页面,第一页链接如下,第二页又是很长没规律的链接。很难用requests库提取页面。
https://search.bilibili.com/all?keyword=%E7%88%AC%E8%99%AB&from_source=webtop_search&spm_id_from=333.1007&search_source=5
针对以上情况,我们可以通过浏览器直接访问每个页面,然后提取页面。当然是让爬虫自己打开浏览器,输入内容访问,然后提取页面元素。这个过程就要用到selenium库。
selenium其实它就是一个自动化测试工具,支持各种主流的浏览器。遇到python,selenium就变成了爬虫利器。
二、安装selenium配置环境变量
1、安装
pipinstallselenium
下载浏览器驱动,我用的是Chrome浏览器,所以下载Chrome驱动即可,当然你可以下载其他浏览器驱动。下载链接:https://chromedriver.chromium.org/,找到和自己浏览器版本一致或者最接近的。
2、配置环境变量
下载解压后,配置环境变量。
解压,然后创建一个存放浏览器驱动的目录,如:D:\\Python\\Driver,将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下,我这里是chromedriver。
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“D:\\Python\\Driver”目录添加到Path的值中。比如:Path字段;D:\\Python\\Driver
关于环境变量不生效的问题:
1:尝试将浏览器驱动,直接放在python安装目录试试
2:配置环境变量后,重启电脑生效(我就是重启才生效)
三、打开浏览器并自动搜索
1、浏览器自动访问
代码,打开浏览器,并访问。
创建了一个Chrome驱动\ndriver=webdriver.Chrome()\n34;https://www.bilibili.com/&代码完成后,关闭浏览器\n39;xxx&34;id&34;xpath&34;linktext&34;partiallinktext&34;name&34;tagname&34;classname&34;cssselector&34;https://www.bilibili.com/&找到元素值\ninput=driver.find_element(By.CLASS_NAME,&39;)\nbutton=driver.find_element(By.CLASS_NAME,&39;)\n\n39;爬虫&点击按钮\nbutton.click()
注:以上如果报错提示没有By这个类型,需要导入包fromselenium.webdriver.common.byimportBy
执行效果:
以上基本的搜索动作就完成了。
四、切换窗口提取网页信息
有网页了,可以用以前学的[BeautifulSoup]库提取页面代码元素了。
1、切换窗口
由于搜索页面是重新打开了一个页面,所以还需要在代码中切换,否则默认的都是第一个页面。
window_handles:获取页面句柄,返回值得为列表list。
switch_to.window:切换页面。
切换页面为最后一个句柄,也是最后一个页面\ndrive.switch_to.window(windows[-1])\n39;CDwindow-EED0C1AE55C6A49DE55D69130254EC0F&39;CDwindow-D04BF7FFBEA89EFB93A990733008FD92&34;https://www.bilibili.com/&39;nav-search-input&39;nav-search-btn&39;爬虫&print(windows)\ndriver.switch_to.window(windows[-1])\n获取源代码\nhtml=driver.page_source\n\nsoup=BeautifulSoup(html,&39;)\nlist=soup.find(class_=&39;).find_all(class_=&34;)\n\nforiteminlist:\n39;bili-video-card__info–tit&39;bili-video-card__info–author&39;bili-video-card__info–date&39;bili-video-card__stats–item&39;bili-video-card__stats__duration&39;a&39;href&39;//&39;&34;D:\\Python\\test_selenium.py&39;bili-video-card__info–tit&39;NoneType&39;text&34;kw&34;&注意,如果省略message=“”,则By.ID外面是两层()
expected_conditions类提供的预期条件判断的方法:
以下两个条件类验证title,验证传入的参数title是否等于或包含于driver.title\ntitle_is\ntitle_contains\n\n以下两个条件验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID,‘kw’)\n顾名思义,一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行\npresence_of_element_located\npresence_of_all_elements_located\n\n以下两个条件判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value\ntext_to_be_present_in_element\ntext_to_be_present_in_element_value\n\n以下条件判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement\nframe_to_be_available_and_switch_to_it\n\n以下条件判断是否有alert出现\nalert_is_present\n\n以下条件判断元素是否可点击,传入locator\nelement_to_be_clickable\n\n以下四个条件判断元素是否被选中,第一个条件传入WebElement对象,第二个传入locator元组\n第三个传入WebElement对象以及状态,相等返回True,否则返回False\n第四个传入locator以及状态,相等返回True,否则返回False\nelement_to_be_selected\nelement_located_to_be_selected\nelement_selection_state_to_be\nelement_located_selection_state_to_be\n\n最后一个条件判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了\nstaleness_of
4、更改代码等待方式
3个地方等待,输入关键词,点击按钮,还有切换页面。
输入搜索框,并确定。
wait=WebDriverWait(driver,10)\n39;nav-search-input&等待定位元素值,并等待是否可点击\nbutton=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,&39;)))
调整页面等待,By.CLASS_NAME定位一个class值,并不能很准确,所以这里用By.CSS_SELECTOR定位。
对CSS_SELECTOR规则不熟的,直接查看源代码复制即可,当然也不一定非要最底层的元素值,我这里到div.video.i_wrapper.search-all-list即可。
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,&i_cecream>div>div:nth-child(2)>div.search-content>div>div>div.video.i_wrapper.search-all-list&34;https://www.bilibili.com/&input=driver.find_element(By.CLASS_NAME,&39;)\n39;nav-search-btn&39;nav-search-input&39;nav-search-btn&39;爬虫&time.sleep(5)\n\nwait.until(EC.presence_of_element_located((By.CSS_SELECTOR,&i_cecream>div>div:nth-child(2)>div.search-content>div>div>div.video.i_wrapper.search-all-list&39;lxml&39;video-listrow&34;bili-video-card&print(item)\nvideo_name=item.find(class_=&39;).text\nvideo_up=item.find(class_=&39;).string\nvideo_date=item.find(class_=&39;).string\nvideo_play=item.find(class_=&39;).text\nvideo_times=item.find(class_=&39;).string\nvideo_link=item.find(&39;)[&39;].replace(&39;,&39;)\nprint(video_name,video_up,video_play,video_times,video_link,video_date+&39;)\ndriver.quit()
六、隐藏浏览器无界面运行
如果长时间运行,不可能一直打开浏览器,这时候就需要用无UI的浏览器,或者隐藏浏览器无界面运行。
方法一:PhantomJS浏览器
PhantomJS一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。
注:最新版selenium(4.x.x)已经放弃PhantomJS,会报错AttributeError:module‘selenium.webdriver‘hasnoattribute‘PhantomJS‘
如需要用这种浏览器,需要卸载最新的selenium,安装3.8.0版本以下的。
pipuninstallselenium\npipinstallselenium==3.8.0
phantomjs下载地址:https://phantomjs.org/download.html,和安装chrome驱动一致,解压,配置环境变量即可。
安装完成后,在代码种将webdriver.Chrome()改成webdriver.PhantomJS()即可。
39;–headless&设置option\ndriver=webdriver.Chrome(options=option)
方法三:在虚拟显示器上工作
推荐使用这种在服务器上执行,这种方式,推荐是在Linux服务器中进行。因为windows容易报错,而且windows不支持某些包。
如报错:ModuleNotFoundError:Nomodulenamed&39;,原因是fcntl包并不支持在window上面运行。
1:Linux安装chrome和下载chromedriver驱动
Linux安装chrome
安装\nsudodpkg-igoogle-chrome-stable_current_amd64.deb\nsudoapt-get-finstall
安装完成后,查看chrome版本
ubuntu@ubuntu:~$google-chrome–version\nGoogleChrome106.0.5249.119
Linux下载chromedriver驱动,根据chrome版本下载在官网相应驱动版本。
解压\nunzipchromedriver_linux64.zip\n#复制到/usr/bin/\nsudocpchromedriver/usr/bin/
2:虚拟显示器执行
使用虚拟桌面前,服务器需要安装xvfb支持虚拟桌面
sudoaptinstallxvfb
安装包pyvirtualdisplay
pip3installpyvirtualdisplay
倒入包名,开启虚拟显示器。
frompyvirtualdisplayimportDisplay\n\ndisplay=Display(visible=0,size=(800,600))\ndisplay.start()\n….\n….\n\ndisplay.stop()
或者用另一个包xvfbwrapper,也可以使用虚拟桌面。
安装包
pip3installxvfbwrapper
导入
fromxvfbwrapperimportXvfb\n\ndisplay=Xvfb(width=1280,height=740)\ndisplay.start()\n….\n….\ndisplay.stop()
以上基本完成了。
OK,关于淘宝网站页面源码分享在哪看和制作淘宝网页的代码的内容到此结束了,希望对大家有所帮助。
