python3使用xpath爬取58同城二手房信息

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个不然还是以列表形式存储!)将列表元素提取出来


以上是个人练习经验总结分享。如有不懂请看注释!注意细节。
启发:不要想着偷懒,偷懒是对自己的不负责。

猜你喜欢

转载自blog.csdn.net/qq_43082279/article/details/112549442