参看原文档
xpath(query)
Find nodes matching the xpath query and return the result as a SelectorList instance with all elements flattened. List elements implement Selector interface too.
query is a string containing the XPATH query to apply.
那么实际上就是去看Selector 相关的函数了。
————————————————
<p>
AA
<sub>1</sub>
<sub>2</sub>
<sub>3</sub>
</p>
<p>
BB
<sub>1</sub>
<sub>2</sub>
<sub>3</sub>
</p>
对于上述例子,其实可以考虑获取到p之后,对其内容再进行一次查找,即可获得 1 、2 、3的内容。
mport urllib.requestimport re
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
html = html.decode('GBK')
return html
def getMeg(html):
reg = re.compile(r'******')
meglist = re.findall(reg,html)
for meg in meglist:
with open('out.txt',mode='a',encoding='utf-8') as file:
file.write('%s\n' % meg)
if __name__ == "__main__":
html = getHtml(url)
getMeg(html)
对于网页数据抓取,有BeautifulSoup、lxml以及正则表达式三种方法,其中正则表达式过于复杂,而beautifulsoup和lxml使用起来较为方便。以前简单使用过beautifulsoup(美味汤),后面为了扩展一下,熟悉一下lxml进行数据抓取。
先贴一个lxml的简单框架:
其中,最主要的在于xpath路径的获取和解析,而XPath就是地址,具体地,就是需要知道所要寻找的内容处在哪个地址下。一般而言,我们可以根据开发者工具来定位我们需要的元素,然后右击选择其所在xpath,选择初步的路径,如下图所示,
这只是一种简单的方法,更重要的,需要掌握xpath的语法规则,下面分别论述。
使用xpath获取信息,主要包括获取本文和获取属性,基本用法为
对比可以看出,一个是采用text()获取文本,一个是采用@属性获取属性值。而前面标签后面方括号就是来对标签进行筛选的。一般而言,通过选择器可以获取诸如/html/body/div[@class="useful"]/ul/li/text()的信息,但是开头的信息没有标志性,采用//div[@class="useful"]/ul/li/text()即可。
这个地方即涉及到了xpath的语法选择,主要包括以下几点:
而在选择器方面,包括以下几个
除此之外,在获取了一个元素之后,我们需要获取其下面元素的属性,即要对基于xpath获取的元素再次采用xpath,此时的获取方式为:
另外,我们也可以获取节点下面所有的字符串,方法为string(.),示例为:
懒得打字了,下面的截图来自W3Cschool, https://www.w3cschool.cn/lxml/_lxml-98h23fk0.html
主要的Xpath运算符包括以下:
按顺序选择等进一步的内容可以移步 https://www.w3cschool.cn/lxml/_lxml-eh1k3fk6.html
具体到不同的网页上,需要的其他知识就更多了,慢慢补充吧。不过似乎还是beautifulsoup好用一些,哈哈。
参考资料:
https://blog.csdn.net/weixin_39851008/article/details/109960957
https://www.w3cschool.cn/lxml/_lxml-98h23fk0.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)