爬虫学习记录(一)


才开始学习爬虫,完全是小白,因此需要多多总结和记录,这篇记录里学习的用例都来自于:
https://blog.csdn.net/MTbaby/article/details/79165890
https://blog.csdn.net/MTbaby/article/details/79174036
https://blog.csdn.net/mtbaby/article/details/79191832

一、环境配置

环境:python3+requests+lxml+Pycharm

requests是python实现的简单易用的HTTP库。
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。

安装requests和lxml:
pip install requests
pip install lxml

二、爬取豆瓣电影

地址:https://movie.douban.com/subject/26942674/?from=showing
在这里插入图片描述
这里爬取电影的名字和演员名字

爬虫操作步骤:
1、请求并下载电影页面信息
2、解析并定为评分信息
3、保存评分数据

先用requests获取页面信息->用lxml里的etree解析页面->用xpath获取指定位置的信息
(如果是爬取多条信息,通过查看xpath的规律做出相应的修改即可)

xpath信息获取:

获取电影的xpath信息并获得文本:

s.xpath('元素的xpath信息/text()')

text()是获得文本信息,如果想获得网页里其他元素比如title就是@title

手动获取元素的xpath信息:
1、如果你是用谷歌浏览器的话,鼠标“右键”–>“检查元素”
2、Ctrl+Shift+C将鼠标定位到标题。
3、“右键”–> “Copy”–> “Copy Xpath”就可以复制xpath

代码

#-*- coding:utf-8 -*-
import requests
from lxml import etree
import time

#requests+xpath爬取豆瓣#
url='https://movie.douban.com/subject/26942674/?from=showing'
data=requests.get(url).text#通过requests获取页面text
s=etree.HTML(data)#用etree解析页面

name=s.xpath('//*[@id="content"]/h1/span[1]/text()')#通过xpath获得信息
actors=s.xpath('//*[@id="info"]/span[3]/span[2]/a/text()')


print("电影名:", name)#输出信息
print("主演:",actors)

输出结果

在这里插入图片描述

三、爬取豆瓣TOP250图书信息

地址:https://book.douban.com/top250
在这里插入图片描述

这里爬取图书的书名和链接以及一句话总结

爬取步骤:(和刚才类似)
1、用data = requests.get(url).text获得页面的文本信息
2、用f = etree.HTML(data)解析页面
3、books = f.xpath(xpath信息/@title)获得指定位置内容

注意:
浏览器复制的 xpath 信息并不是完全 可靠的,浏览器经常会自己在里面增加多余的 tbody 标签,我们需要手动把这些标签删掉

代码:

#-*- coding:utf-8 -*-
import requests
from lxml import etree
import time

for i in range(10):
    url = 'https://book.douban.com/top250?start={}'.format(i*25)#format用于添加{}里的值,这里是一个页面的url,总共爬取是个页面,以25为单位增加
    data = requests.get(url).text#requests获取网页信息
    f = etree.HTML(data)#etree解析网页
    books = f.xpath('//*[@id="content"]/div/div[1]/div/table')#xpath定位信息的位置,()里是信息的xpath值。这里存储的是每本书的信息

    for div in books:#遍历每本书
        title = div.xpath('./tr/td[2]/div[1]/a/@title')[0]#xpath里是/@title()还是/text()还是/@href取决于你想要获取哪个元素的信息
        score = div.xpath('./tr/td[2]/div[2]/span[2]/text()')[0]#xpath返回的是列表,[0]是取出列表的第一个值,是为了去掉列表的[ ]符号
        comment = div.xpath('./tr/td[2]/p[2]/span/text()')
        num = div.xpath('./tr/td[2]/div[2]/span[3]/text()')[0].strip('(').strip().strip(')')
'''这行代码用了几个strip() 方法,() 里面表示要删除的内容,	
strip(‘(‘) 表示删除括号,strip() 表示删除空白符。 
如果不用strip() 方法,有很多无用的信息会被爬取,内容混乱'''
        href = div.xpath('./tr/td[2]/div[1]/a/@href')[0]
        time.sleep(1) #加个睡眠,防止IP被封

        if len(comment)>0:#如果有评论,就输出评论
            print('{}-->{}-->{}-->{}-->{}'.format(title,score,comment[0],num,href))
        else:#没有就不输出
            print('{}-->{}-->{}-->{}'.format(title,score,num,href))
        print('\n')

输出结果
在这里插入图片描述

四、爬取小猪短租住房信息

地址:http://sz.xiaozhu.com/
在这里插入图片描述

步骤都和之前的类似,都是找到要爬取的xpath,然后寻找规律来批量爬取。
代码:

#-*- coding:utf-8 -*-
import requests
from lxml import etree
import time

for i in range(1,6):

    url3 = 'http://sz.xiaozhu.com/search-duanzufang-p{}-0/'.format(i)#每一页的网页url规律就是p后面的数字不同
    data3 = requests.get(url3).text#获取网页
    h = etree.HTML(data3)#解析网页
    home = h.xpath('//*[@id="page_list"]/ul/li')#所有住房信息的xpath
    time.sleep(2)#防止被封IP所以加个睡眠
    for div in home:#获得其中一套房屋的信息
        time.sleep(2)
        #找到xpath的规律将想要的信息的xpath添加在div后面
        title = div.xpath('./div[2]/div/a/span/text()')[0] #标题
        price = div.xpath('./div[2]/div/span/i/text()')#价格
        describle = div.xpath('./div[2]/div/em/text()')[0].strip()#描述
        photo = div.xpath('./a/img/@lazy_src')
        
        #输出信息
        print ("{}-->{}-->{}\n{}".format(title,price,describle,photo))

输出结果
在这里插入图片描述

五、 总结

采用requests+xpath这种方式进行爬取前面的获取解析网页套路都一样,就是xpath需要自己去网页中找并且寻找规律,这种方式还是比较简单好上手。
不管用什么方式都要记得time.sleep()加个睡眠哦~不然会被封ip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值