首页 > 其他分享 >分享一个简单爬虫

分享一个简单爬虫

时间:2023-05-10 10:22:51浏览次数:46  
标签:get url 爬虫 start headers str 简单 分享 page

今天有同学问我为什么信息提取不出来?

下面是同学的源代码:

import requests
from bs4 import BeautifulSoup

start_url = "http://tieba.baidu.com/p/4957100148"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER"}
response = requests.get(start_url,headers = headers).text
soup  = BeautifulSoup(response,"html.parser")
infos = soup.select('div.d_post_content j_d_post_content  clearfix')

他是同find方法,找的div的class标签,对于这个问题,我们可以换个思路,这个定位找不到,就往上找,我的代码:

import requests
from bs4 import BeautifulSoup

start_url = "http://tieba.baidu.com/p/4957100148"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 LBBROWSER"}
response = requests.get(start_url,headers = headers).text
soup  = BeautifulSoup(response,"html.parser")
infos = soup.select('cc > div')
for info in infos:
    print(info.get_text().strip())

总结:各种爬取方法都需要灵活使用。

关于图片爬虫完整代码

'''
Method:
1. 根据 url 的规律指定爬取页面
2. 解析 html 获得当前页面所有图片 url
3. 进入图片之后,再次解析 html 获得原始图片的 url
4. get 原始图片的 url 并保存到本地
'''

import os
import sys
import time
import requests
from typing import List
from bs4 import BeautifulSoup


# 获得当前页面所有图片 url
def get_page_url(page: str) -> List[str]:
    '''
    :description: 获得当前页面所有图片 url
    :param {str} page 指定页号
    :return {List[str]} 返回当前页面的图片 url 列表
    '''
    headers = {
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
        'Connection': 'keep-alive'
    }
    url = 'https://wallhaven.cc/toplist?page=' + str(page)
    r = requests.get(url, headers=headers, timeout=5)
    soup = BeautifulSoup(r.text, 'lxml')
    page_url = []
    for link in soup.find_all('a', class_='preview'):
        page_url.append(link.get('href'))
    return page_url


# 图片下载到本地
def download(path: str, start: int = 1, cnt: int = 5) -> None:
    '''
    :description: 图片下载到本地
    :param {str} path 文件存储路径
    :param {int} start 起始页号,默认为1
    :param {int} cnt 爬取页数,默认为5
    :return {*}
    '''
    print('开始爬取 wallhaven/toplist 图片第' + str(start) + '-' + str(start + cnt - 1) + '页')
    # 建立会话
    session = requests.Session()
    session.encoding = 'utf-8'
    headers = {
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
        'Connection': 'keep-alive'
    }

    for page in range(start, start + cnt):
        print('开始下载第' + str(page) + '页图片')
        # 获得当前页上所有图片的 url
        page_url = get_page_url(page)

        for i, pic_url in enumerate(page_url, 1):
            # 检查文件是否存在,避免重复下载
            if os.path.exists(path + pic_url.split('/')[-1] + '.png'):
                print('第' + str(page) + '页, 第' + str(i) + '张图片已存在')
                continue

            try:
                r = session.get(pic_url, headers=headers, timeout=5)
                soup = BeautifulSoup(r.text, 'lxml')
            except:
                print('第' + str(page) + '页, 第' + str(i) + '张图片请求失败')
                continue

            # 解析得到图片原路径以及图片id
            img_tag = soup.find('img', id='wallpaper')
            img_id = img_tag.get('data-wallpaper-id')
            img_raw_url = img_tag.get('src')
            # 存储图片名
            img_name = path + img_id + '.png'

            try:
                data = session.get(img_raw_url, headers=headers, timeout=5)
                with open(img_name, 'wb') as f:
                    f.write(data.content)
                    f.flush()
                print('第' + str(page) + '页, 第' + str(i) + '张图片下载成功')
            except:
                print('第' + str(page) + '页, 第' + str(i) + '张图片下载失败')
            else:
                time.sleep(1)

        print('第' + str(page) + '页图片下载完成')
    print('第' + str(start) + '-' + str(start + cnt - 1) + '页图片下载完成')


if __name__ == '__main__':
    cur_dir = os.path.dirname(sys.argv[0])
    databse_dir = cur_dir + '\\wallhaven_download\\'
    if not os.path.exists(databse_dir):
        os.makedirs(databse_dir)
    download(databse_dir)

结语

对于其他的图片网站,我们也可以采取类似的方法下载图片,当然也可能遇到各种各样的问题,比如图片大小,网站验证等问题,这时候就要具体情况具体分析了吧。

标签:get,url,爬虫,start,headers,str,简单,分享,page
From: https://www.cnblogs.com/q-q56731526/p/17387185.html

相关文章

  • Three_Phase_Rectifier_SimpleSVPWM:基于MATLAB/Simulink的三相电压型简单SVPWM整流器
    Three_Phase_Rectifier_SimpleSVPWM:基于MATLAB/Simulink的三相电压型简单SVPWM整流器仿真模型,输出电压开环控制。仿真条件:MATLAB/SimulinkR2015bID:7120649953967466......
  • 你还在纠结怎么选IDE吗?常用IDE工具分享
    近期有不少刚学编程的小伙伴来问我,市面上那么多IDE工具,该怎么选?今天在这里跟大家分享几款个人比较钟爱的IDE工具,供大家参考。VisualStudio 优点:支持多种语言,包括C#,C++,VisualBasic等,可用于Web应用程序、桌面应用程序、移动应用程序等开发;集成了多种工具和功能,例如调试器......
  • 分享一个提高运维效率的 Python 脚本
    哈喽大家好我是咸鱼,今天给大家分享一个能够提升运维效率的python脚本咸鱼平常在工作当中通常会接触到下面类似的场景:容灾切换的时候批量对机器上的配置文件内容进行修改替换对机器批量替换某个文件中的字段对于Linux机器,咸鱼可以写个shell脚本或者直接批量使用sed命......
  • 海明码的简单运算
    n位数,则其海明码的位数x满足:2的x次方>=n+x+1;得到位数x;将x个数全部插入所给出的数中。列如:位置分别为2的0次方,2的1次方,到2的x次方;后将得出的校验码列出。标入下标,12356置x+n-1号的末尾。此时可以开始验证。随机的下标位数验证:下标数的下标列位置=海明码加入的数的下标之和,则......
  • 爬虫案例 X-Requested-With 异步请求
    importrequestsfromcopyheadersimportheaders_raw_to_dicturl='https://eregpublicsecure.ksrzis.cz/Registr/RZPRO/Osoba'post_url=url+"/GetOsobaList"#headers信息X-Requested-With异步请求的时候需要headers_raw=b"""X-Req......
  • make 备忘清单_开发速查表分享
    make备忘清单make是一条计算机指令,是在安装有GNUMake的计算机上的可执行指令。该指令是读入一个名为makefile[1]的文件,然后执行这个文件中指定的指令。Make可以从一个名为makefile的文件中获得如何构建你所写程序的依赖关系,Makefile中列出了每个目标文件以及如何由其他文件......
  • 【触想智能】工业触摸显示器触摸失灵原因分析与解决办法分享
    工业触摸显示器,顾名思义就是带有触摸功能的工业显示器。目前工业触摸显示器已经在智能制造业、人工智能、商业金融、城市交通、智慧医疗、学校教育等诸多领域得到广泛应用,对社会经济发展具有很大的促进作用,同时也推升了人们生活的便捷性。工业触摸显示器属于电子产品,我们......
  • 【0基础学爬虫】爬虫基础之自动化工具 Pyppeteer 的使用
    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为自动化工具Pyppeteer的使用。概述......
  • SQL技术分享和问题交流
    1.多数表在建表时考滤了主键,但是应用查询时并没有及是补足索引,多数表没索引,造成查询数据慢。建议建立标准数据库,并配置索引。2.分表太细,union多表查询消耗大量服务器的SQL编译时间。建议分表最小到年即可,要有索引。分表尽量按热数据、冷数据的条件去分,避免用时间等区分。3.巨......
  • 安卓免费听歌软件分享 卡音
    卡音 下载地址:https://whykang.lanzouy.com/iF2uQ09e7bif 备用地址:https://wwi.lanzoup.com/i2G5j0v0kf0h ......