吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4445|回复: 7
收起左侧

[Python 转载] 百度贴吧图片爬取, 新人第一帖, 多多关照

  [复制链接]
evanqqqq 发表于 2019-3-21 16:51
本帖最后由 evanqqqq 于 2019-3-26 18:58 编辑

因为楼主比较喜欢看贴吧, 经常发现好玩的图片, 就用python写了一个爬虫来爬取图片. 可以自定义贴吧名和爬取的页数. 希望大佬们给些指点:$qqq
不同的贴吧需要的解析式可能会不同, 代码里30行和31行的解析式不确定,  如果30行的解析式不行, 改成31行的就可以了.     ----------------wkj1688在吗
[Python] 纯文本查看 复制代码
import requests
from lxml import etree
import time


class Baiduspider(object):
    def __init__(self):
        self.baseurl = 'https://tieba.baidu.com/'
        self.url = 'https://tieba.baidu.com/f?'
        self.headers = {'User-Agent':'Mozilla/5.0'}
    
    #获取帖子链接
    def getPageUrl(self,url):
        res = requests.get(url,headers=self.headers)
        res.encoding= 'utf-8'
        html = res.text
        parseHtml = etree.HTML(html)
        # 2. 解析对象调用xpath
        r1 = parseHtml.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
        for t in r1:
            self.getImaUrl(t)
        
    #获取帖子中图片的连接
    def getImaUrl(self,t):
        res = requests.get(self.baseurl+t,headers=self.headers)
        res.encoding= 'utf-8'
        html = res.text
        parseHtml = etree.HTML(html)
        # 2. 解析对象调用xpath.  两个解析式不确定, 第一个不能用就换第二个
        r2 = parseHtml.xpath('//div[@class="d_post_content j_d_post_content  clearfix"]/img[@class="BDE_Image"]/@src')
        #r2 = parseHtml.xpath('//div[@class="d_post_content j_d_post_content "]/img[@class="BDE_Image"]/@src')
        for i in r2:
            self.saveImage(i)
    
    #保存图片到本地
    def saveImage(self,i):
        print(i)
        res = requests.get(i,headers=self.headers)
        html = res.content
        # 这里自定义图片保存路径, 我是在d盘创建了一个image文件夹用来保存, 图片名就用time.time来定义了
        with open('D:\image\%s.jpg'% time.time(),'wb') as f:
            f.write(html)

    def workOn(self):
        key = input('请输入要爬取的贴吧名:')
        pn = int(input('请输入要爬取的页数:'))
        for x in range(1,pn+1):
            url = self.url + 'kw=' + key +'&pn=' + str((x-1)*50)
            print('================')
            print(url)
            self.getPageUrl(url)
    
if __name__=='__main__':
    spider = Baiduspider()
    spider.workOn()

免费评分

参与人数 3吾爱币 +2 热心值 +2 收起 理由
wangfeilong0317 + 1 清晰明了 谢谢分享
jiekema + 1 用心讨论,共获提升!
idolin + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| evanqqqq 发表于 2019-3-21 20:26
以下是爬取 校花 吧, 第 1 页的成果
校花吧图片爬取.png
jiekema 发表于 2019-3-21 20:47
路过查看一下,不知道关于楼主所说的用爬虫来进行爬去,而如贴吧之类的肯定是要采取办法的,有可能会被禁止相关爬去,不知是否如何规避。
 楼主| evanqqqq 发表于 2019-3-25 09:04
jiekema 发表于 2019-3-21 20:47
路过查看一下,不知道关于楼主所说的用爬虫来进行爬去,而如贴吧之类的肯定是要采取办法的,有可能会被禁止 ...

百度贴吧目前反爬并不严格, 如果担心被封ip, 可以多弄一些useragent, 放到列表中, 用的时候就随机出来一个.  例如这样:
[Python] 纯文本查看 复制代码
hlist = [
        {'User-Agent':'Mozilla/5.0'},
        {'User-Agent':'Opera/8.0'}
        ]


用的时候写成random.choice随机出来一个就行了.  
52leitong2016 发表于 2019-3-28 17:26
谢谢分享 学习了
zzgaot 发表于 2019-3-31 18:39
楼主你好,我想请教一个问题,在r1 = parseHtml.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')这句中,我在浏览器里用xpath可以找到结果,为什么我在pycharm中怎么都找不到结果呢,每次返回的都是空列表,换别的如bs、pyquery,正则也提取不出来,把网页存到文档,文档里有,但是就是找不到,能帮忙解释一下嘛?都折腾两三天了,头都大了
newbie2019 发表于 2019-4-22 18:34
支持大大分享技术,学习了。
内裤超人 发表于 2019-4-22 19:59
zzgaot 发表于 2019-3-31 18:39
楼主你好,我想请教一个问题,在r1 = parseHtml.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@hre ...

一样啊,我之前也是用浏览器的xpath就有结果,python就没有
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 07:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表