首页 > 编程语言 >02 python爬虫-bs4

02 python爬虫-bs4

时间:2023-06-03 18:03:38浏览次数:54  
标签:02 img python text list bs4 csv data find

目录

  • 步骤
  • 代码
  • 结果
  • new.csv
  • 图片

步骤

  1. 爬取主页面中的文章详情的url和图片地址
  2. 下载图片 并请求加文章详情中的页面内容
  3. 爬取文章详情中的标题、作者、发布时间

代码

import requests
import csv
from bs4 import BeautifulSoup

# 请求的一级页面的地址
q_url = 'http://xinfadi.com.cn/newsCenter.html?current=1'

def get_page():
    headers = {
        'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 UOS'
    }
    r = requests.get(q_url, headers=headers)
    r.encoding = 'utf-8'
    res = r.text

    return res


def parser_text(content):
    # 把页面源代码交给BeautifulSoup进行处理,生成bs对象
    # 从bs对象中查找数据
    # find(标签,属性=值)
    # find_all(标签,属性=值)
    # return
    soup = BeautifulSoup(content, 'html.parser')
    # 找属性id=nowplaying的div 下的 class=list-item 的所有li  find找一个 find_all找所有
    # li_list = soup.find_all('ul', class_='list_con fl')
    # attrs 和 class_ 是一个意思,此时可以避免class关键字
    li_list = soup.find_all('ul', attrs={'class': 'list_con fl'})
    data_list = list()
    for li in li_list:
        dataKV = {}
        src = li.find('a')  # 找li标签下的a标签
        # http://xinfadi.com.cn + /news-118.html
        dataKV['src'] = q_url.split('/newsCenter')[0] + src.get('href')  # 获取href的值

        # http://newlands-n.oss-cn-beijing.aliyuncs.com/IMAGE/bf1d68af-8966-4e1e-bcac-3a34233a6970.jpg
        img = li.find('img')  # 找li标签下的img标签
        dataKV['img'] = img.get('src')  # 获取src的值

        # 下载图片
        save_data_b(dataKV['img'])

        # 请求详情页面
        # http://xinfadi.com.cn/news-137.html
        r = requests.get(dataKV['src'])
        r.encoding = 'utf-8'
        second_res = r.text
        second_soup = BeautifulSoup(second_res, 'html.parser')
        title = second_soup.find('span', attrs={'class': 'right'}).text
        dataKV['title'] = title
        spans = second_soup.find('div', attrs={'class': 'ssss'}).find_all('span')
        dataKV['author'] = spans[0].text
        dataKV['time'] = spans[1].text

        data_list.append(dataKV)
        # print("======" * 10)
    return data_list


# 存为CSV
def save_data_csv(data_list):
    headers = data_list[0].keys()  # 获取标题

    with open('new.csv', 'w', newline='', encoding='utf-8') as f:
        f_csv = csv.DictWriter(f, headers)
        f_csv.writeheader()
        f_csv.writerows(data_list)


# 下载图片 、 mp4 、 zip 都可以这样下载
def save_data_b(url):
    r = requests.get(url)
    img_name = url.split("/")[-1]  # p2892635176.jpg
    with open('img/' + img_name, mode='wb') as f:
        f.write(r.content)


if __name__ == '__main__':
	# 步骤
    # 1. 爬取主页面中的文章详情的url和图片地址
    # 2. 下载图片 并请求加文章详情中的页面内容
    # 3. 爬取文章详情中的标题、作者、发布时间

    # 获取页面源代码
    text = get_page()
    # 解析源代码,获取需要的信息
    data_list = parser_text(text)
    # 存为csv数据
    save_data_csv(data_list)

结果

new.csv

src,img,title,author,time
http://xinfadi.com.cn/news-137.html,http://newlands-n.oss-cn-beijing.aliyuncs.com/IMAGE/bf1d68af-8966-4e1e-bcac-3a34233a6970.jpg,【重要通知】新发地保供车辆司乘人员报备平台,admin,2022-10-13 17:49:47
http://xinfadi.com.cn/news-126.html,http://newlands-n.oss-cn-beijing.aliyuncs.com/IMAGE/2523ea4a-dc2c-461e-b709-270a56241859.jpg,【隆重招商】新发地全国名特优农产品销售中心全新招商,admin,2022-07-18 18:13:42

图片

02 python爬虫-bs4_bc


标签:02,img,python,text,list,bs4,csv,data,find
From: https://blog.51cto.com/u_6192297/6408347

相关文章

  • python 操作 xlsx
    目录读取/写入:openpyxldemo1读取/写入:openpyxldemo1importopenpyxlimportos#创建exceldefwrite_excel_xlsx(path,sheet_name,value):ifnotos.path.exists(path):write_new_excel_xlsx(path,sheet_name,value)else:append_write_excel_x......
  • Python潮流周刊#5:并发一百万个任务要用多少内存?
    你好,我是猫哥。这里记录每周值得分享的Python及通用技术内容,部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)博客原文:https://pythoncat.top/posts/2023-06-03-weekly5文章&教程1、并发一百万个任务要用多少内存?(英文)文中测试了主流的编......
  • python内置库-email
    email库简要介绍eamil库用来创建和解析电子邮件,这些电子邮件可结合smtp协议和pop协议来发送及收取位于email包的中心的类就是EmailMessage这个类,利用它可构造一个邮件对象,利用这个邮件对象可添加正文、添加附件、设置收发件人具体的官网文档不太好懂,下面给出几个示例实例......
  • 用chartGPT学习一门语言--python(提问示范)
    1. 2. 3. 4 5. 6. ......
  • Windows server 2022 常见 备份事项
    以下是WindowsServer2022的DNS备份批处理脚本示例:CopyCode@echooffsetlocalrem定义备份路径setbackupPath=c:\dns_backup\rem获取当前日期时间作为备份文件名for/f"tokens=1-3delims=/"%%ain('date/t')doset"datestamp=%%a-%%b-%%c"for/f&q......
  • 2022版本IDEA+Maven+Tomcat的第一个程序(傻瓜教学)
    2022版本IDEA+Maven+Tomcat的第一个程序(傻瓜教学)​作为学习Javaweb的一个重要环节,如何实现在IDEA中利用Maven工具创建一个Javaweb程序模版并连接Tomcat发布是非常重要的。我比较愚钝(小白),而且自身电脑先前运行过spring或maven的程序,系统内有一些IDEA安装的文件,因此花了点......
  • 3月25日邓老师设计模式面试资料02
    Spring面试专题1.Spring应该很熟悉吧?来介绍下你的Spring的理解  有些同学可能会抢答,不熟悉!!!  好了,不开玩笑,面对这个问题我们应该怎么来回答呢?我们给大家梳理这个几个维度来回答1.1Spring的发展历程  先介绍Spring是怎么来的,发展中有哪些核心的节点,当前的最新版本是......
  • Python 的字符串内建函数
    Pythoncapitalize()方法将字符串的第一个字母变成大写,其他字母变小写print("第一个内建函数str.capitalize()")s1='a,b's2='A,B's3='a,BCD's4='a,B'#因为a前面有个空格,所以不显示大写print(s1.capitalize())print(s2.capitalize())print(s3.capi......
  • 【python】多线程
     在Python3中,通过threading模块提供线程的功能。原来的thread模块已废弃。但是threading模块中有个Thread类(大写的T,类名),是模块中最主要的线程类,一定要分清楚了,千万不要搞混了。threading模块提供了一些比较实用的方法或者属性,例如:方法与属性描述current_thread()返......
  • windows server2022 激活
    近期因为需要安装一个Windowsserver2022服务器操作系统做测试,安装完成后发现一些设置需要激活后方可使用。但又不想使用网上的激活软件去激活。有没有办法不安装激活软件又能激活延长Windowsserver2022操作系统的方法。还真找到了一个方法。以管理员身份打开运行powershell。打......