python3使用xpath爬取58同城二手房信息
写代码必做的三件事:
1.做笔记,注意细节!
2.代码一定要加上注释!
3.思路一定要清晰!
# 目标:通过xpath表达式爬取58同城二手房标题信息
# 导入lxml库里的etree对象:该对象中包含有我们需要的xpath方法
from lxml import etree
# 导入网页请求库:
import requests
if __name__ == "__main__":
# 请求头参数
headers ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.57'}
# 指定url
url='https://gz.58.com/ershoufang/'
# 发送请求:没有请求参数所有不用封装paramse/data
response = requests.get(url=url,headers=headers).text
# 已获取到,打印看一下!
# print(response)
# 实例化etree对象:获取网上请求到的源码数据使用etree.HTML('请求到的数据'.etree.HTMLparser()),
# 如果是本地请用etree.parse('本地数据',etree.HTMLparser())
tree=etree.HTML(response,etree.HTMLParser())
# 打印出etree.HTML()方法获取到的源码数据tree
# print(tree)
# # 调用etree.tostring()方法打印出etree.HTML()方法获取到的源码数据(tree),默认为二进制
# result = etree.tostring(tree)
# print(result.decode('utf-8')) #默认二进制所以要将result以utf-8的格式输出
# 使用xpath表达式一次提取想要的内容数据://表示从根部标签开始; @后面可以跟class,id也就是标签属性(attrs)
# list_li = tree.xpath('//ul[@class="house-list-wrap"]/li/div[@class="list-info"]/h2/a/text()')
# str_data=','.join(list_li) #将列表元素使用字符串操作方法'分隔符'.join(obj)转成字符串
# print(str_data)
# 使用xpath表达式分两次提取想要的内容数据
# 第一次:从根部标签开始定位
list_li_one =tree.xpath('//ul[@class="house-list-wrap"]/li')
# 因为列表没有xpath方法,所以要使用for循环将etree对象类型的数据全部提取出来才能(也就是把获取到的li全部从列表提取出来)
# 然后再使用xpath表达式去匹配( str_data_one.xpath() )
for str_data_one in list_li_one:
print(type(str_data_one)) # 打印出lxml.etree对象类型元素;结果:<class 'lxml.etree._Element'>
# 第二次:局部标签开始定位;从第一次匹配到的li开始;局部标签开始使用./
str_data_content = str_data_one.xpath('./div[@class="list-info"]/h2/a/text()')
print(str_data_content[0]) #使用索引(记得不要超过2个不然还是以列表形式存储!)将列表元素提取出来
以上是个人练习经验总结分享。如有不懂请看注释!注意细节。
启发:不要想着偷懒,偷懒是对自己的不负责。