第三章简单静态网页爬取

Imagemap
第三章简单静态网页爬取实现HTTP请求Http请求过程生成请求->(请求头处理,超时设置,请求重试)->查看状态码等urllib3urllib3网址https://pypi.org/project/urllib3/ 重要特性:8个线程安全*管理连接池客户端SSL/TLS验证使用分部编码上传文件协助处理重复请求的HTTP重定位支持压缩编码支持HTTP和 SOCKS代理测试覆盖率达到100%生成请求urllib3.request(method,url,fields,header ...method:请求类型,如GET,HEAD,DELETE等,必填url:网址,必填fields:请求参数,默认Noneheaders:请求头参数,默认Nonetimeout:超时时间(秒)如: timeout=3.0如:urllib3.Timeout(connect=1.0,read=3.0)retries:请求重试(次)如:retries=10如:retries=5,redirect=4如:retries=5如:redirect=Falseurllib3请求实例SY_3_5_URLLIB_HTTP.pyrequestsrequests网址http://www.python-requests.org/en/master ...特性:15个Keep-Alive&连接池基本/摘要式的身份认证文件分块上传国际化域名和URL优雅的 key/value Cookie流下载带持久Cookie的会话自动解压连接超时浏览器式的SSL认证Unicode响应体分块请求自动内容解码HTTP(S)代理支持支持.netrc生成请求requests常用方法requests.getrqg=requests.get(url)rqg.status_code:返回状态码rqg.encoding:查看编码rqg.headers:查看响应头rqg.text:查看网页内容chardet.detect(rqg.content)['encoding']编 ...rqg=requests.get(url,headers,timeout)timeout:超时(秒)headers:请求头requests.headrequests.postrequests.requestmethodurlparamsdatajsonheaderscookiesauthtimeoutproxiesallow_redirectsstreamverifycertrequests请求实例SY_3_11_REQUESTS_GET.py解析网页Chrome开发者开发者工具多种方式打开(F12,Ctrl+Shift+I等)工具面板9个*元素面板*控制台面板*源代码面板*网络面板性能面板内存面板应用面板安全面板审查面板常用面板元素面板HTML,CSS.DOM可以查看元素在页面对应的位置控制台面板可以查看警告或错误可以JS交互源代码面板可以进行JS调试可以查看HTML源码网络面板*查看资源,HTTP请求头,响应内容,Cookies,Timing正则表达式正则表达式学习站点https://www.runoob.com/regexp/regexp-syn ...https://www.runoob.com/python/python-reg ...常用表达式.*? re模块使用步骤先将正则表达式的字符串形式编译为Pattern实例然后使用Pattern实例处理文本并获得匹配结果(一个Match实例)最后使用Match实例获得信息,进行其他的操作常用方法compile,match,search,split,findall,f ...re.compile(pattern,flags=0)flag参数可选值 re.M多行模式rs.S将'.'置为匹配任意字符,常见.*?rs.I忽略大小写re.search(pattern,string,flags=0)re.findall(pattern,string,flags=0)re获取网页标题实例SY_3_14_RE_TITLE.pyXpath解析网页基本语法构造对象:
html=lxml.etree.HTML(text,parser,* ...text:需要转换为HTML的字符串paser:HTML解析器如:etree.HTMLParser(encoding='utf-8')base_url:原始URLXpath匹配内容常用表达式nodename:选取nodename节点的所有子节点/:从当前节点选取直接子节点//:从当前节点选取所有子孙节点.:选取当前节点..:选取当前节点的父节点@:选取属性如: result=html.xpath('head')谓语谓语用来查找 某个特定的节点或包含某个指定的值 的节点谓语被嵌在路径后的方括号中谓语常用表达式/html/body/div[1]:选取body子节点的第一个div节点/html/body/div[last()]:选取 body子节点的最后一个 d .../html/body/div[last()-1]:选取 body子节点的倒数第二 .../html/body/div[position()<3]:选取属于body子节点 .../html/body/div[@id]:选取属于 body子节点的带有id属性的 .../html/body/div[@id="content"]:选取属于body子节 .../html/body/div[xx>10.00]:选取属于body子节点的xx元 ...如:result=html.xpath('//header[@class]')功能函数模糊搜索功能,只需部分特征就可搜索常用的功能函数starts-with//div[starts-with(@id,"co")]contains//div[contains(@id,"co")]and//div[contains(@id,"co") and contains(@i ...text//li[contains(text(),"first")]如:title=html.xpath('//title/text()')xpath提取header节点下全部标题文本及对应链接实例SY_3_20_LXML_XPATH_4.pyBeautiful Soup解析网页解析器html.parsetlxmllxml-xml或xmlhtml5lib默认创建对象BeautifulSoup("..."):通过字符串创建BeautifulSoup(open("index.html")):通过HTML ...BeautifulSoup(html,'lxml):指定lxml解析器创建BS4 ...格式化输出BeautifulSoup.prettify(self, encoding=No ...对象类型Tagsoup.headsoup.body.asoup.find_all('a')tag属性tag.name:获取tag的nametag.attrs:获取tag对象的全部属性tag['class']:获取tab的class属性NavigableStringsoup.title.string:获取tag对象中包含的字符串BeautifulSouptype(soup)Comment是文档的注释使用soup.tag.string获得是个可以直接输出 的字符串搜索节点rlt=find_all(name,attrs,recursive,string ...name:名为name的tag对象attrs:css类名的tag对象recursive:是否检索所有子孙节点,默认truestring:匹配字符串的内容搜索子节点rlt2 = rlt.find_all("a")for i in rlt2:   print i.string选择子节点select#通过tag标签逐层查找 soup.select("html head titl ...#寻找直接子标签 soup.select("head > title")#选择所有紧接着id为link1元素之后的class为sister的元素 sou ...#选择p元素之后的每一个ul元素 soup.select("p + ul")#同时用多种CSS选择器查询元素 soup.select("#link1,#li ...#通过查询元素属性 soup.select('a[href="http://ex ...#通过语言查找 soup.select('p[lang|=en]')select_one#查找第一个元素 soup.select_one(".sister") 查找父节点find_parent()#查找a的父节点中的P标签 a_string.find_parent("p")查兄弟节点find_next_sibling()BS4搜索目标并提取文本内容实例SY_3_28_BS4_PRETTIFY_8.py存储数据存为JSON文件编码与解码编码过程为将Python对象转换为Json对象的过程Python对象html.xpathJson对象{key:value,key2:value2}解码过程为将 Json对象转换为Python对象的过程json.dump:将JSON对象写入文件内json.load()用于从json文件中读取数据json.dumps:生成一个字符串json.loads(str):str类型的数据转成dictdump&dumps参数skipkeys:是否跳过非python基本类型的keyensure_ascii:非 ASCII字符显示成\uXXX格式,设为False ...indent:是否缩进格式化,若值>=0,则按该值缩排,否则若为None,则一行 ...separators:分隔符,{key:value,key2:value2}(' ...encoding:编码,默认utf-8sort_keys:根据keys的值 进行排序dump导出Json文件实例SY_3_29_JSON_FILE.py存储到MySQL创建test库1,打开mysql workbench客户端2,左侧树图空白处->右击->创建schema3,输入schema名称,选择字符集utf8,utf8_bin ->apply应 ...4,如何修改schema和表字符集,如视频修改schema和表字符集视频连接方法pymysql.connect(host,port,user,passwd,db ...host,port:主机和端口(3306)本地localhost127.0.0.1它机home.hddly.cn192.168.31.11user,passwd:用户和密码db:数据库名charset:编码,建议utf8connect_timeout:连接超时,默认10秒use_unicode:以unicode格式返回,默认None连接对象connectcommit:提交事务rollback:事务回滚cursor:创建游标close:关闭游标execute:执行sql,可以增加、删除、修改记录executemany:执行多条sqlfetchone:获取一条记录fetchall:获取全部记录scroll:游标滚动存储到MySQL实例SY_3_31_PYMYSQL.py常见问题1,入库时脚本运行提示错误:Incorrect String value...错误信处如图更改数据库和表的字符集为utf8,如视频修改schema和表字符集视频实训内容实训一实训要求熟练使用urllib3库urllib3请求实例SY_3_5_URLLIB_HTTP.py熟练使用 requests库requests请求实例SY_3_11_REQUESTS_GET.pytaobao商品采集:SY_4_3_TAOBAO.py,超星随堂实训二实训要求 熟练使用Chrome开发者工具取元素的Xpath路径和选择器路径取Cookies熟练使用正则表达式re获取网页标题实例SY_3_14_RE_TITLE.py熟练使用Xpathxpath提取header节点下全部标题文本及对应链接实例SY_3_20_LXML_XPATH_4.py熟练使用BeautifulSoupBS4搜索目标并提取文本内容实例SY_3_28_BS4_PRETTIFY_8.py实训三实训要求熟练使用JSON库dump导出Json文件实例SY_3_29_JSON_FILE.py熟练使用PyMySQL库存储到MySQL实例SY_3_31_PYMYSQL.py
hide
第三章简单静态网页爬取
hide
hide
hide
Xpath解析网页
hide
Beautiful Soup解析网页
hide