关于编码:
resp.encoding = 'utf-8'
resp.encoding = 'gbk'
关于内容三种方法:
一、etree.HTML(resp.text).xpath():
1、参考网站未整理:
https://www.jianshu.com/p/4d3c9cae5470
https://blog.csdn.net/qq_23120963/article/details/129993462
https://zhuanlan.zhihu.com/p/394134264
http://www.360doc.com/content/23/0210/11/81615618_1066999473.shtml
https://blog.csdn.net/q1246192888/article/details/123649072
https://blog.csdn.net/weixin_59246157/article/details/130000926
https://blog.csdn.net/free_xiaochen/article/details/128183052
https://blog.csdn.net/qq_23120963/article/details/129993462
https://zhuanlan.zhihu.com/p/394134264
http://www.360doc.com/content/23/0210/11/81615618_1066999473.shtml
https://blog.csdn.net/q1246192888/article/details/123649072
https://blog.csdn.net/weixin_59246157/article/details/130000926
https://blog.csdn.net/free_xiaochen/article/details/128183052
2、常用:以xpath = f'//table[@class="players_table"]/tr//td[1] 为例:
//表示在网页中遍历此标签,可获取全部此标签路径。/表示只在当前路径,而不遍历,类似于绝对路径。
[@xxx="yyy"]是过滤器,表示只挑选名为yyy的xxx类型。
[@xxx="yyy"]是过滤器,表示只挑选名为yyy的xxx类型。
td[1]表示在众多td中的第1个。
在一个路径下,/@data-imgname,表示取该路径下的data-imgname这个属性。/text(),表示取该路径下的文本,注意如果没有内容,xpath会丢失这个元素(xpath返回的是list),会导致少元素。
在一个路径下,/@data-imgname,表示取该路径下的data-imgname这个属性。/text(),表示取该路径下的文本,注意如果没有内容,xpath会丢失这个元素(xpath返回的是list),会导致少元素。
如果只有路径,返回的是对象,可用 etree.tostring(lis[i], encoding='utf-8').decode('utf-8'),来获取全部路径内容,如果没有汉字,可不用encoding和decode来编码解码,然后再进一步处理。
3、关于xpath /text() 空内容,丢元素的处理:
先取对象,然后遍历对象,取出text,join连起来。但这只适合一个文本或者无文本,如果遇到多个文本的(如带br的会取出2个元素),则需要进一步具体问题具体分析。
e = etree.HTML(resp.text)
xpath = f'xpath表达式'
all = [] for i in e.xpath(xpath_obj): lis = i.xpath('./text()') s = ''.join(lis) all.append(s) return all
二、文本 .split() ,进行来回分割。
三、正则 re.findall(),其中re.S表示.可以匹配换行符,(?!xxx). 表示排除xxx。
lis_reg = re.findall('(.*?)', 'str', re.S) # 不用re.S,只匹配一行内。
lis_reg = re.findall('(.*?)', 'str', re.S) # 不用re.S,只匹配一行内。
findall返回一个list,如果多个子匹配,好像是用元组包起来的。