admin管理员组文章数量:1516870
pathon
下载pathon3,下载pycharm(IDE工具)。pycharm有免费版和收费版,收费版需要找个验证码破解一下。
安装python的时候,勾选下面的增加到系统的path配置,就可以自动配置path,然后install now就可以了。
安装好软件后,还需要安装一些插件。根据自己的需要自己安装。
比如:xlwt(处理excel),lxml(解析xml) ,requests(解析网络请求)。
打开cmd,输入
pip3 install lxml(要安装的插件名称)
安装后,就可以在pathon程序的开头引入这个包
python去爬虫内容,我理解就是用python去解析网页,找到网页中的共性,提取共性元素。所以需要对网页知识有些了解。比如网页的格式,div,css等等。
我们安装chrome,用chrome打开网页,点击开发者工具
鼠标指向网页元素,点击右键检查,会在右侧的开发者工具中,显示和该元素对应的代码
右键高亮的代码区,选择xpath,会把该代码用xpath的方式copy,以便我们在py里解析。
我们先来看第一段代码
解析一个本地的html文件
html文件内容
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>second web</title><link rel="stylesheet" type="text/css" href="main.css">
</head>
<body><div class="header"><h1>first web</h1></div><div class="main-content"><ul class="article"><li><img src="1.jpg" width="100" height="90"><h3>first</h3><p>this is first</p></li><li><img src="2.jpg" width="100" height="90"><h3>second</h3><p>this is second</p></li><li><img src="3.jpg" width="100" height="90"><h3>third</h3><p>this is third</p></li></ul></div><div class="footer"><p>©黄黄弋</p></div>
</body>
</html>我们的解析代码如下
#引入需要使用的包 from lxml import etree#打开文件,3个参数,文件名路径,打开方式(只读,读写,写),打开格式 f = open('second_web.html','r',encoding='utf-8') # print(f.read()) 测试是否正确读取 #使用引入的包中的类,把文件解析成html格式 html = etree.HTML(f.read())#从1到4循环,不包括4,递增1 for i in range(1,4):#用xpath的方式解析取得的html内容,//div 2个斜杠表示不是从头开始,是从中间任意地方开始 #div[2],表示第2个div #{}表示这里是个函数,format里面的内容会放到这里,也就是i会放到这里 #@height, @表示是img的属性,而不是下一级标签 #[0],用xpath处理后返回的是个数组,[0]表示取第一个,这里只有一个值,所以也只能取第一个 img = html.xpath('//div[2]/ul/li[{}]/img/@height'.format(i))[0]print(img)
主要注意几点1.循环的写法,for () in () : 注意循环执行的代码,要缩进,如果和循环在同一个位置,会报错失败
2.语句结束不需要分隔符
3.变量的定义,不需要定义类型,直接使用即可。
4.严格区分大小写
到这里,我们已经可以解析本地的文件了,下面我们来写第2段代码,解析网上的网页
from lxml import etree import requests#这里定义了一个数组,地址中的页码是个变量,这里给变量赋值1到11,不包括11 urls = ['{}/'.format(str(i))for i in range(1,11)] for url in urls:#把地址解析成请求res = requests.get(url)#把地址请求的页面变成htmlhtml = etree.HTML(res.text)#用xpath把页面里的指定元素解析到数组中#@class是 标签中的class元素infos = html.xpath('//ul[@class="sellListContent"]/li')#对数据做循环,把从chrome浏览器中copy的xpath内容黏贴到这里,从里面去掉和infos定义中重复的部分,# 也就是去掉//ul[@class="sellListContent"]/li,去掉li之前的内容,只留下后面的部分#在内容后面系上/text(),会把这部分内容解析成文本格式。for info in infos:title = info.xpath('div[1]/div[1]/a/text()')[0]price = info.xpath('div[1]/div[6]/div[1]/span/text()')[0]address = info.xpath('div[1]/div[2]/div/a/text()')[0]#多个元素在同一个 区块内,查找规律找到分隔符把他们分开room = info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')[1]area = info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')[2]orient = info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')[3]style = info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')[4]#有的内容没有这个部分# test1 = info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')[5]#从0开始的,所以如果[5],就是长度是6,目前的格式[0]没内容if len(info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')) == 6:lift = info.xpath('div[1]/div[2]/div/text()')[0].split(' | ')[5]else:lift = '无电梯'print(title,'#', price,'#', address,'#', room,'#', area,'#', orient,'#', style,'#', lift)
本文标签: pathon
版权声明:本文标题:pathon 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1707132190a711915.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论