澳门1495

1495娱乐《Python 爬虫:零基础全实战入门》代码合集。Python爬虫入门 | 5 爬取小猪短租租房信息。

九月 27th, 2018  |  综合体育

DC学院   《Python
爬虫:入门+进阶》系统课程
  

聊猪短租是一个租房网站,上面来许多优质的民宿出租信息,下面我们坐成都地区的租房信息吗例,来尝试爬取这些数据。

先是省:下充斥百度过首页信息

import requests

data = requests.get('https://www.baidu.com/')
data.encoding='utf-8'

print(data.text)

  

微猪短租(成都)页面:http://cd.xiaozhu.com/

次省:Requsts+Xpath 爬取豆瓣电影

1.爬取单个元素信息

import requests
from lxml import etree

url = 'https://movie.douban.com/subject/1292052/'
data = requests.get(url).text
s=etree.HTML(data)

file=s.xpath('//*[@id="content"]/h1/span[1]/text()')
print(file)

2.爬取多独元素信息

import requests
from lxml import etree

url = 'https://movie.douban.com/subject/1292052/'
data = requests.get(url).text
s=etree.HTML(data)

film=s.xpath('//*[@id="content"]/h1/span[1]/text()')
director=s.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')
actor=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')
time=s.xpath('//*[@id="info"]/span[13]/text()')

print('电影名称:',film)
print('导演:',director)
print('主演:',actor)
print('片长:',time)

  

第四节:爬取豆瓣图书TOP250消息

from lxml import etree
import requests
import time

for a in range(10):
    url = 'https://book.douban.com/top250?start={}'.format(a*25)
    data = requests.get(url).text

    s=etree.HTML(data)
    file=s.xpath('//*[@id="content"]/div/div[1]/div/table')
    time.sleep(3)

    for div in file:
        title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
        href = div.xpath("./tr/td[2]/div[1]/a/@href")[0]
        score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
        num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")").strip()
        scrible=div.xpath("./tr/td[2]/p[2]/span/text()")

        if len(scrible) > 0:
            print("{},{},{},{},{}\n".format(title,href,score,num,scrible[0]))
        else:
            print("{},{},{},{}\n".format(title,href,score,num))

  

1.爬取租房标题

按规矩,先来爬下标题试试和,找到题目,复制xpath。


大抵复制几个房的标题 xpath 进行对比:

//*[@id="page_list"]/ul/li[1]/div[2]/div/a/span
//*[@id="page_list"]/ul/li[2]/div[2]/div/a/span
//*[@id="page_list"]/ul/li[3]/div[2]/div/a/span

一晃发觉题目的 xpath 只当<li>后序号变化,于是,秒写起爬取整页标题的
xpath:

//*[@id=“page_list”]/ul/li/div[2]/div/a/span


抑或定位的老路,让咱品尝把整页的题目爬下来:

稍猪在IP限制方面比严格,代码中务必要在 sleep() 函数控制爬取的频率


好了,再来对比下 xpath 信息

image.png

顺标题的价签网上寻找,找到任何房屋信息标签, xpath 对比如下:

//*[@id=“page_list”]/ul/li   #整体
//*[@id=“page_list”]/ul/li/div[2]/div/a/span   #标题


而应该懂得该怎么来改代码了吧,写一个循环往复:

file=s.xpath(‘//*[@id=“page_list”]/ul/li’)
for div in file:    
  title=div.xpath("./div[2]/div/a/span/text()")[0]


好了,来运转一下试行:

第五节:爬取小猪短租房屋信息

from lxml import etree
import requests
import time

for a in range(1,6):
    url = 'http://cd.xiaozhu.com/search-duanzufang-p{}-0/'.format(a)
    data = requests.get(url).text

    s=etree.HTML(data)
    file=s.xpath('//*[@id="page_list"]/ul/li')
    time.sleep(3)

    for div in file:
        title=div.xpath("./div[2]/div/a/span/text()")[0]
        price=div.xpath("./div[2]/span[1]/i/text()")[0]
        scrible=div.xpath("./div[2]/div/em/text()")[0].strip()
        pic=div.xpath("./a/img/@lazy_src")[0]

        print("{}   {}   {}   {}\n".format(title,price,scrible,pic))

  

2.爬取多只要素的音讯

相对而言其他因素的 xpath:

//*[@id=“page_list”]/ul/li   #整体
//*[@id=“page_list”]/ul/li/div[2]/div/a/span   #标题
//*[@id=“page_list”]/ul/li/div[2]/span[1]/i   #价格
//*[@id=“page_list”]/ul/li/div[2]/div/em   #描述
//*[@id=“page_list”]/ul/li/a/img   #图片


下一场可以写有代码:

file=s.xpath(“//*[@id=“page_list”]/ul/li”)
for div in file:    
  title=div.xpath(“./div[2]/div/a/span/text()”)[0]          
  price=div.xpath(“./div[2]/span[1]/i/text()”)[0]    
  scrible=div.xpath(“./div[2]/div/em/text()”)[0].strip()    
  pic=div.xpath(“./a/img/@lazy_src”)[0]


来尝试运行一下:

第六省:将爬取的数额存到本地

1.囤小猪短租数据

from lxml import etree
import requests
import time

with open('/Users/mac/Desktop/xiaozhu.csv','w',encoding='utf-8') as f:
    for a in range(1,6):
        url = 'http://cd.xiaozhu.com/search-duanzufang-p{}-0/'.format(a)
        data = requests.get(url).text

        s=etree.HTML(data)
        file=s.xpath('//*[@id="page_list"]/ul/li')
        time.sleep(3)

        for div in file:
            title=div.xpath("./div[2]/div/a/span/text()")[0]
            price=div.xpath("./div[2]/span[1]/i/text()")[0]
            scrible=div.xpath("./div[2]/div/em/text()")[0].strip()
            pic=div.xpath("./a/img/@lazy_src")[0]

            f.write("{},{},{},{}\n".format(title,price,scrible,pic))

2.囤积豆瓣图书TOP250数量

from lxml import etree
import requests
import time

with open('/Users/mac/Desktop/top250.csv','w',encoding='utf-8') as f:
    for a in range(10):
        url = 'https://book.douban.com/top250?start={}'.format(a*25)
        data = requests.get(url).text

        s=etree.HTML(data)
        file=s.xpath('//*[@id="content"]/div/div[1]/div/table')
        time.sleep(3)

        for div in file:
            title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
            href = div.xpath("./tr/td[2]/div[1]/a/@href")[0]
            score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
            num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")").strip()
            scrible=div.xpath("./tr/td[2]/p[2]/span/text()")

            if len(scrible) > 0:
                f.write("{},{},{},{},{}\n".format(title,href,score,num,scrible[0]))
            else:
                f.write("{},{},{},{}\n".format(title,href,score,num))

  

3.翻页,爬取更多页面

扣押一下翻页时候 url 的转移:

http://cd.xiaozhu.com/search-duanzufang-p1-0/    #第一页
http://cd.xiaozhu.com/search-duanzufang-p2-0/    #第二页
http://cd.xiaozhu.com/search-duanzufang-p3-0/    #第三页
http://cd.xiaozhu.com/search-duanzufang-p4-0/    #第四页
……………………


url 变化之原理很简单,只是 p
后面的数字不均等要曾,而且和页码的序号是同一模子一样的,这虽挺好惩治了……写一个简单的轮回来遍历所有的url。

for a in range(1,6):    
  url = ‘http://cd.xiaozhu.com/search-duanzufang-p{}-0/’.format(a)
  # 我们这里尝试5个页面,你可以根据自己的需求来写爬取的页面数量


总体的代码如下:

from lxml import etree
import requests
import time

for a in range(1,6):
    url = 'http://cd.xiaozhu.com/search-duanzufang-p{}-0/'.format(a)
    data = requests.get(url).text

    s=etree.HTML(data)
    file=s.xpath('//*[@id="page_list"]/ul/li')
    time.sleep(3)

    for div in file:
        title=div.xpath("./div[2]/div/a/span/text()")[0]
        price=div.xpath("./div[2]/span[1]/i/text()")[0]
        scrible=div.xpath("./div[2]/div/em/text()")[0].strip()
        pic=div.xpath("./a/img/@lazy_src")[0]

        print("{}   {}   {}   {}\n".format(title,price,scrible,pic))


扣押一下爬了5只页面下的效能:


深信你曾控制爬虫基本的老路了,但您还索要去不断熟悉,能独立写起代码为止。

描绘代码不仅使致密,也用耐心。很多总人口于入门到放弃,并无是因编程这件事情有多麻烦,而是某次实践进程被,遇到一个略题目。


好了,这节课就到这边!


下节主:Python爬虫入门 | 6
将攀登回来的数量存到本地

完全7节课程目录:
Python爬虫入门 | 1
Python环境之设置
Python爬虫入门 | 2
爬取豆瓣电影信息
Python爬虫入门 | 3
爬虫必备Python知识
Python爬虫入门 | 4
爬1495娱乐取豆瓣TOP250书信息
Python爬虫入门 | 5
爬取多少猪短租租房信息
Python爬虫入门 | 6
将攀登回去的数量存到本地
Python爬虫入门 | 7
分类爬取豆瓣电影,解决动态加载问题

白白~

第七节:爬取豆瓣分类电影信息,解决动态加载页面

import requests
import json
import time

for a in range(3):
    url_visit = 'https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start={}'.format(a*20)
    file = requests.get(url_visit).json()   #这里跟之前的不一样,因为返回的是 json 文件
    time.sleep(2)

    for i in range(20):
        dict=file['data'][i]   #取出字典中 'data' 下第 [i] 部电影的信息
        urlname=dict['url']
        title=dict['title']
        rate=dict['rate']
        cast=dict['casts']

        print('{}  {}  {}  {}\n'.format(title,rate,'  '.join(cast),urlname))

  
  

DC学院:《Python爬虫:入门+进阶》

快的上学路径
直接由实际的案例入手,通过实际的操作,学习具体的知识点

每课都发习资料
挑最得力的攻资料,你唯有待去履行,不必浪费时间搜集、筛选资源

超多案例,覆盖主流网站
知乎、淘宝、微博、去哪里、58和城市等数十只网站案例

GET 多种反反爬技能
自在解决IP限制、动态加载、验证码相当于强反爬虫手段

进阶分布式爬虫
控分布式技术,搭建爬虫框架,大规模数据爬取和数据库存储

  

《Python爬虫:入门+进阶》(PC端在直接开上课)

手机扫描二维码进入,立即开课

  
  

相关文章

标签:, ,

Your Comments

近期评论

    功能


    网站地图xml地图