步骤

  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. Makefile 简单学习

    一.Makefile 简介 Makefile 是一种常用于编译的脚本语言.它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译).注意 Makefile 文件命令必须是 Make ...

  2. 【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试

    本篇文章基于STM32F103和CH390H芯片进行例程移植及相关注意事项,简单验证TCP\UDP\Ping基础功能. 硬件:STM32F103开发板+沁恒CH390H的评估版图一示,SPI使用接口为 ...

  3. OpenHarmony页面级UI状态存储:LocalStorage

      LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例.LocalStorage也可以在UIAbility内,页面间共享 ...

  4. VS Qt扩展插件下载地址

    使用vs开发qt项目,需要安装qt插件 QT插件下载地址:https://mirrors.ustc.edu.cn/qtproject/official_releases/vsaddin/

  5. win7系统部署django项目

        win7系统部署django项目,在Windows电脑上我使用的是  Apache + mod_wsgi 来部署的   # 背景 Python 3.8.3 Django 3.1.7 Apach ...

  6. RestfulApi 学习笔记——.net core入门操作(二)

    前言 前面简单介绍了一下restfulapi是什么东西,那么我们应该在.net core 中如何实现呢?或者说该怎么做才能有这个restful api呢? 正文 幸运的是.net core帮助我们实现 ...

  7. 深入分析C++对象模型之移动构造函数

    接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. C++11新标准 ...

  8. 8k中英双语文本嵌入模型效果初探

    一 模型介绍 向量模型用于生成向量表示,被广泛应用于检索.分类.聚类或语义匹配等传统的自然语言处理任务.到了大模型时代,由于上下文长度的限制,需要压缩.存储和查询大量的信息,这就需要用到向量模型对输入 ...

  9. Oracle sql 月份的加减以及差值

    Oracle sql 月份的加减以及差值 差值 使用months_between,输出的是两个日期的差值 select months_between(TO_DATE('2022-05-31','yyy ...

  10. 阿里云张新涛:连接产业上下游,构建XR协作生态

    简介: 用交互技术辅以澎湃的算力带给大家最真实的"沉浸式体验" 2022年9月2日,在世界人工智能大会"区块新生 数字宇宙--元宇宙技术与生态合作"分论坛上,阿 ...