步骤

  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的更多相关文章

  1. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  2. python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)

    一.数据类型及解析方式 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的数据. 非结构化数据:先有数据,再有结构, 结构化数 ...

  3. python爬虫入门02:教你通过 Fiddler 进行手机抓包

    哟~哟~哟~ hi起来 everybody 今天要说说怎么在我们的手机抓包 通过 python爬虫入门01:教你在Chrome浏览器轻松抓包 我们知道了 HTTP 的请求方式 以及在 Chrome 中 ...

  4. Python爬虫--- 1.1请求库的安装与使用

    来说先说爬虫的原理:爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来.这个时候就要用到请 ...

  5. [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息

    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫   版权声明: ...

  6. Python爬虫系统学习(1)

    Python爬虫系统化学习(1) 前言:爬虫的学习对生活中很多事情都很有帮助,比如买房的时候爬取房价,爬取影评之类的,学习爬虫也是在提升对Python的掌握,所以我准备用2-3周的晚上时间,提升自己对 ...

  7. python 爬虫(二)

    python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...

  8. Python爬虫入门

    Python爬虫简介(来源于维基百科): 网络爬虫始于一张被称作种子的统一资源地址(URLs)列表.当网络爬虫访问这些统一资源定位器时,它们会甄别出页面上所有的超链接,并将它们写入一张"待访列表",即 ...

  9. python爬虫代码

    原创python爬虫代码 主要用到urllib2.BeautifulSoup模块 #encoding=utf-8 import re import requests import urllib2 im ...

  10. 一个简单的多线程Python爬虫(一)

    一个简单的多线程Python爬虫 最近想要抓取拉勾网的数据,最开始是使用Scrapy的,但是遇到了下面两个问题: 前端页面是用JS模板引擎生成的 接口主要是用POST提交参数的 目前不会处理使用JS模 ...

随机推荐

  1. KingbaseES V8R6 逻辑恢复到新的 schema

    前言 本文介绍一下KingbaseES V8R6版本中逻辑恢复时,将原有的对象恢复到新的schema. sys_restore命令中如果只加入了-g(原schema) -G(新schema)参数 那么 ...

  2. Hadoop_08 Hadoop重装

    今日总结: 由于之前配置存在问题,今天学到后面之后发现很多bug,需要全部卸载重新配置Hadoop.ZooKeeper以及Hbase.

  3. MySQL数据过滤和搜索

    操作符 AND操作符 mysql> SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 AND prod_p ...

  4. 11.硬核的volatile考点分析

    大家好,我是王有志.关注王有志,一起聊技术,聊游戏,聊在外漂泊的生活. 今天我们学习并发编程中另一个重要的关键字volatile,虽然面试中它的占比低于synchronized,但依旧是不可忽略的内容 ...

  5. 详解数仓对象设计中序列SEQUENCE原理与应用

    本文分享自华为云社区<GaussDB(DWS)对象设计之序列SEQUENCE原理与使用方法介绍>,作者:VV一笑. 1. 前言 适用版本:8.2.1及以上版本 序列SEQUENCE用来生成 ...

  6. Avalonia的UI组件

    Avalonia是一个强大的跨平台UI框架,允许开发者构建丰富的桌面应用程序. 它提供了众多UI组件.灵活的布局系统.可定制的样式以及事件处理机制. 在这篇博客中,我们将详细解析Avalonia的UI ...

  7. 【直播回顾】OpenHarmony知识赋能第五期第一课——精益开源

    4月26日晚上19点,知识赋能第五期第一节课<精益开源--理解设计思维.精益创业.敏捷开发是如何应用到开源项目中>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由开源 ...

  8. centos环境minio安装踩坑指南2023年7月30日

    MinIO的安装踩坑指南 环境centos7 1. 安装MinIO官方文档 Binary下载 , 按照官网的路径配置比较快 下载minio wget https://dl.min.io/server/ ...

  9. openGauss社区入门(openGauss-常用数据类型)

    常用数据类型 数据类型 说明 布尔类型 boolean true/'1'/'yes' false/'0'/'no' 数值类型 smallint 两字节 int 4 字节 bigint 8 字节 dou ...

  10. 算法小白刷了一周 LeetCode 后的思考

    Hi,我是 itchao 我自己工作有 2 两年多的前端开发经验,但是数据结构与算法一直不好,基本就是一个算法小白的水平. 听说大公司面试都要手写算法题,最近为了以后能去更好的公司,然后其实心里比较着 ...