小何的爬虫笔记——xpath

xpath解析

'''
最常用最便捷搞笑的一种解析方式,通用性、
-xpath解析原理
    -实例化etree对象,并且需要将被解析的页面源码 数据加载到对象中
    -调用etree对象中的xpath结合着xpath表达式实现标签的定位和内容的捕获

'''

# 如何实例化etree对象
#     -将本地的html文档中源码数据加载到etree中:
#         etree.parase(filepath)
#     -可以将互联网上的源码数据加载到该对象中
#         etree.HTML('page_text')
#      -xpath('xpath表达式')
from lxml import etree
parser = etree.HTMLParser(encoding='utf-8') #html代码书写不规范,不符合xml解析器的使用规范
#实例化一个etree对象并且将被解析的源码加载到了实例化中
tree=etree.parse('1.html',parser=parser)
r=tree.xpath('/html/body/div')  #第一个/表示从根节点开始定位 之后的每个/表示一个层级
print(r)        #[<Element title at 0x1580ff5ec88>]  返回的是一个Element的对象
r=tree.xpath('/html//div')  # // 中表示多个层级  这个比上个r多
print(r)
r=tree.xpath('//div[@class="dzpzmain"]')  #定位到某个具体属性值//div[@class="dzpzmain"]
print(r)
r=tree.xpath('//div[@class="dzpzmain"]/div/ul/li[@class="columm"]')
print(r)
"""
取文本 取内容
- /text()获取的是标签的直系文本内容
- //text()获取的是标签的非直系文本内容(所有文本内容)

取属性 
/ @attrName         ==>img/src
"""
r=tree.xpath('//div[@class="dzpzmain"]//li/i/text()')
print(r)
r=tree.xpath('//div/a/@href')[0]
print(r)






''''
xpath案例讲解
爬取58二手房中的相关信息
'''
import requests
from lxml import etree
import matplotlib.pyplot as plt
import numpy as np
headers_firefox={'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
headers_google={
'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
parser = etree.HTMLParser(encoding='utf-8') #html代码书写不规范,不符合xml解析器的使用规范
parame={

}
url='https://gz.58.com/ershoufang/'
page_text=requests.get(url=url,headers=headers_google).text

#数据解析
tree=etree.HTML(page_text)
name_li_list=tree.xpath('//ul[@class="house-list-wrap"]/li')

name_list=[]
for li in name_li_list:
    name=li.xpath('./div[@class="list-info"]/h2/a/text()')[0]  #一定要加上点.
    print(name)
    name_list.append(name)
price_li_list=tree.xpath('//ul[@class="house-list-wrap"]/li')
print(price_li_list)
price_list=[]

for li in price_li_list:
    price=li.xpath('./div[@class="price"]//b//text()')
    l='万元'
    print(price[0],l)
    price_li_list.append(price)

print(np.mean(price_list))

实战:重点_xpath爬取4k图片

import requests
from lxml import etree
import os
headers_firefox={'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
headers_google={
'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
if not os.path.exists('./picLibs'):
    os.mkdir('./picLibs')

for i in range(0,100):
    url='http://pic.netbian.com/4kmeinv/index_'+str(int(i))+'.html'
    response=requests.get(url=url,headers=headers_google)
    # 可以手动设定响应数据编码格式?
    # response.encoding='utf-8'
    page_text=response.text
    # 数据解析:src的属性值 alt属性
    tree=etree.HTML(page_text)
    li_list=tree.xpath('//div[@class="slist"]/ul/li')
    #创建一个文件夹

    for li in li_list:
        img_src='http://pic.netbian.com'+li.xpath('./a/img/@src')[0]
        img_name=li.xpath('./a/img/@alt')[0]+'.jpg'
        #较为通用处理中文的编码格式
        img_name=img_name.encode('iso-8859-1').decode('gbk')
        # print(img_name)     #此时名称出现乱码
        # print(img_src)

        #请求图片进行持久化存储
        img_data=requests.get(url=img_src,headers=headers_google).content
        img_path='picLibs/'+img_name
        with open(img_path,'wb') as fp:
            fp.write(img_data)
            print(img_name,'下载成功')

实战:重点_xpath解析出所有城市名称

import requests
from lxml import etree





url='https://www.aqistudy.cn/historydata/'
headers_firefox={'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
headers_google={
'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
response=requests.get(url=url,headers=headers_google)
response.encoding='utf-8'
page_text=response.text

tree=etree.HTML(page_text)
all_hot_city_name=[]
hot_li_list=tree.xpath('//div[@class="bottom"]/ul/li')
# 解析到了热门城市的城市名称
for li in hot_li_list:
    hot_city_name=li.xpath('./a/text()')
    all_hot_city_name.append(hot_city_name)


# 解析全部城市名称
all_city_name_list=tree.xpath('//div[@class="bottom"]/ul/div[2]/li')
all_city_name=[]
for li in all_city_name_list:
    city_name=li.xpath('./a/text()')[0]
    all_city_name.append(city_name)






# 用xpath一次将热门城市和其他城市全部解析出来a
url='https://www.aqistudy.cn/historydata/'
headers_firefox={'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
headers_google={
'User-Agent':
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
response=requests.get(url=url,headers=headers_google)
response.encoding='utf-8'
page_text=response.text
tree=etree.HTML(page_text)
# 解析到热门城市和所有城市对应的a标签
#热门城市:div/ul/li/a        其他所有城市:div//ul/div[2]/li/a
a_list=tree.xpath('//div[@class="bottom"]/ul/li/a | //div[@class="bottom"]/ul/div[2]/li') #使用或字运算符|做标签!
china_city_names=[]
for a in a_list:
    a=a.xpath('./text()')[0]
    china_city_names.append(a)
print(len(china_city_names))  #394成功!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我来为你介绍一下如何使用Scrapy爬取豆瓣TOP250电影信息。 1. 安装Scrapy 首先,你需要安装Scrapy。如果你已经安装了Python,可以在命令行中使用以下命令安装Scrapy: ``` pip install Scrapy ``` 2. 创建Scrapy项目 接下来,我们需要创建一个Scrapy项目。在命令行中输入以下命令: ``` scrapy startproject douban_top250 ``` 这将会在当前目录下创建一个名为“douban_top250”的文件夹,其中包含了Scrapy项目的基本结构。 3. 编写爬虫代码 在“douban_top250/spiders”目录下创建一个名为“douban.py”的文件,并输入以下代码: ```python import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): for movie in response.xpath('//div[@class="hd"]'): yield { 'title': movie.xpath('.//span[@class="title"]/text()').extract_first(), 'rating': movie.xpath('../div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first(), 'link': movie.xpath('.//a/@href').extract_first(), } next_page = response.xpath('//span[@class="next"]/a/@href') if next_page: yield response.follow(next_page[0], self.parse) ``` 这段代码定义了一个名为“DoubanSpider”的类,用于爬取豆瓣电影TOP250的电影名称、评分和链接。在这个类中,我们使用了XPath选择器来定位页面中的元素。 4. 运行爬虫 在命令行中进入“douban_top250”文件夹,并输入以下命令来运行爬虫: ``` scrapy crawl douban -o douban_top250.csv ``` 这将会运行刚才编写的“DoubanSpider”爬虫,并将结果保存在名为“douban_top250.csv”的文件中。 至此,你已经学会了如何使用Scrapy来爬取豆瓣TOP250电影信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值