补充知识
根据看别人打代码,使用的模块,封装的方法。
PyExecJS、python Click(定制命令)、gunicorn(是一个wsgi协议的web服务器)结合Flask后端部署。
手机爬虫
抓包工具:
前提条件:
1).电脑需要安装Fiddler 2).测试手机需要支持Wifi 3).测试手机与电脑需要同一网络 4).所测APP需支持代理
app加固、Android安卓动态调试 概念
fiddler手机抓包原理
在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应。Fiddler 是以代理web 服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。网络请求走fiddler,fiddler从中拦截数据,由于fiddler充当中间人的角色,所以可以解密https。因此,它比一般的firebug或者是chrome自带的抓包工具要好用的多。不仅如此,它还可以支持请求重放等一些高级功能。它还可以支持对手机应用进行http抓包的。本文就是手机抓包。
selenium的使用
选择器基本用法
# 1、find_element_by_id 根据id找 # 2、find_element_by_link_text 根据链接名字找到控件(a标签的文字) # 3、find_element_by_partial_link_text 根据链接名字找到控件(a标签的文字)模糊查询 # 4、find_element_by_tag_name 根据标签名 # 5、find_element_by_class_name 根据类名 # 6、find_element_by_name 根据属性名 # 7、find_element_by_css_selector 根据css选择器 # 8、find_element_by_xpath 根据xpath选择
代码实例:模拟自动化账号登录。
from selenium import webdriver import time bro=webdriver.Chrome() bro.get("http://www.baidu.com") bro.implicitly_wait(10) dl_button=bro.find_element_by_link_text("登录") dl_button.click() user_login=bro.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn') user_login.click() time.sleep(1) input_name=bro.find_element_by_name('userName') input_name.send_keys("[email protected]") input_password=bro.find_element_by_id("TANGRAM__PSP_10__password") input_password.send_keys("xxxxxx") submit_button=bro.find_element_by_id('TANGRAM__PSP_10__submit') time.sleep(1) submit_button.click() time.sleep(100) print(bro.get_cookies()) bro.close()
获取cookies的结果
显示等待和隐示等待
#隐式等待:在查找所有元素时,如果尚未被加载,则等10秒 # browser.implicitly_wait(10) 表示等待所有, #显式等待:显式地等待某个元素被加载 # wait=WebDriverWait(browser,10) # wait.until(EC.presence_of_element_located((By.ID,'content_left')))
爬取京东商品信息
打开京东页面搜索游戏本电脑分析:
打开分析:
利用选择器,逐一往下查询。
代码实例:
from selenium import webdriver from selenium.webdriver.common.keys import Keys #键盘按键操作 import time bro=webdriver.Chrome() bro.get("https://www.jd.com") bro.implicitly_wait(10) def get_goods(bro): print("--------------------------") 分页 goods_li = bro.find_elements_by_class_name('gl-item') for good in goods_li: img_url = good.find_element_by_css_selector('.p-img a img').get_attribute('src') if not img_url: img_url = 'https:' + good.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img') url = good.find_element_by_css_selector('.p-img a').get_attribute('href') price = good.find_element_by_css_selector('.p-price i').text name = good.find_element_by_css_selector('.p-name em').text.replace('\n', '') commit = good.find_element_by_css_selector('.p-commit a').text print(''' 商品链接:%s 商品图片:%s 商品名字:%s 商品价格:%s 商品评论数:%s ''' % (url, img_url, name, price, commit)) next_page = bro.find_element_by_partial_link_text("下一页") time.sleep(1) next_page.click() time.sleep(1) get_goods(bro) input_search=bro.find_element_by_id('key') input_search.send_keys("性感内衣") input_search.send_keys(Keys.ENTER) #进入了另一个页面 try: get_goods(bro) except Exception as e: print("结束") finally: bro.close()
XPath
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
因此,对 XPath 的理解是很多高级 XML 应用的基础。
选取节点
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。