思路:抓取所有li,对li中的信息进行分析显示
1、标题爬取
我们发现这个是一个ul列表,所以我们可以先获取到所有li的xpath值。方法:右键li-->Copy-->Copy Xpath。
我们先复制标题的信息,多复制几个进行对比,结果如下:
对比后发现,标题只是li[]序号发生该表,所以我们可以很快写出标题的通用xpath信息:
//*[@id="page_list"]/ul/li/div[2]/div/a/span
我们再比较一下整个li和标题的xpath:
代码优化下,我们先把整页的标题爬取下来。
import requests
from lxml import etree
import time
url = "http://gz.xiaozhu.com/"
headers = {"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"}
response = requests.get(url,headers=headers)
data1 = response.content.decode()
h = etree.HTML(data1)
#获取到所有的li
home = h.xpath('//*[@id="page_list"]/ul/li')
time.sleep(2) #防止IP被封,加个睡眠
for div in home: #对li进行筛选,输出
#利用xpath的区别选取标题
title = div.xpath('./div[2]/div/a/span/text()')[0]
print(title)
结果展示:
圆融|昌岗双地铁口邻美院江南西琶洲南站一房
长隆欢乐世界南门南站地铁汉溪长隆站兰若小屋
【当唐•三度】东山口独栋西洋别墅loft单间
我宿-广州南站/广交会/长隆地铁旁复式趣玩房
【博物馆·生活空间】榻榻米双床房
广州塔全景小蛮腰江景大投影豪华双人套房2
长隆景区旁地铁线直达广州塔琶洲展馆复式美居
客村双地铁上盖自带花园园林整套独立日式风民宿
【中国台湾】北京路东山口地铁旁民国别墅品味老广州
琶洲广交会长隆地铁珠江新城广州塔复式2房整租
【10號】小公主|ins梦幻公主床独立卫生间
建设六-淘金-浪漫小屋
【Yoyo家】珠江新城 琶洲会展中心温馨复式
长隆地铁口舒适2米大床房复式商务家庭套房
【广交会优选】佛系阁楼,上下九沙面双地铁
长隆复式LOFT大投影地铁直达广州塔珠江新城
后面还有很多。。。
2、其他内容爬取
基本框架搭好了,我们往框架里面添加其他信息。
对比其他元素的xpath:
于是我们写下代码:
for div in home:
title = div.xpath('./div[2]/div/a/span/text()')[0] #标题
price = div.xpath('./div[2]/span[1]/i/text()')[0] #价格
describle = div.xpath('./div[2]/div/em/text()')[0].strip() #描述
time.sleep(1)
print("租房:"+"{}-->{}-->{}".format(title,price,describle))
结果展示:
3、爬取5页数据
看一下url的变化:
第一页:http://gz.xiaozhu.com/search-duanzufang-p1-0/
第二页:http://gz.xiaozhu.com/search-duanzufang-p2-0/
第三页:http://gz.xiaozhu.com/search-duanzufang-p3-0/
第四页:http://gz.xiaozhu.com/search-duanzufang-p4-0/
可以发现url的变化非常规律,只是p后面的数字不一样而已,而且和页码的序号是一模一样的,biu特否!
于是乎,加个循环我们就可以爬取多个页面的数据了。
所有代码:
import requests
from lxml import etree
import time
for i in range(1,6):
url = "http://gz.xiaozhu.com/search-duanzufang-p{}-0".format(i)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}
response = requests.get(url,headers=headers)
data1 = response.content.decode()
h = etree.HTML(data1)
home = h.xpath('.//*[@id="page_list"]/ul/li')#获取到所有的li
time.sleep(2)#防止IP被封,加个睡眠
for div in home:#对li进行筛选输出
title = div.xpath('./div[2]/div/a/span/text()')[0]#标题
price = div.xpath('./div[2]/span[1]/i/text()')[0]#价格
describle = div.xpath('./div[2]/div/em/text()')[0].strip()#描述
time.sleep(1)
print("租房:"+"{}-->{}-->{}".format(title,price.describle))
4、总结
本次学习主要内容:requests模块,xpath
领取专属 10元无门槛券
私享最新 技术干货