python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
作者:jia666666 发布时间:2022-01-05 19:39:44
标签:python,爬虫requests,urllib
使用python爬虫库requests,urllib爬取今日头条街拍美图
代码均有注释
import re,json,requests,os
from hashlib import md5
from urllib.parse import urlencode
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
from multiprocessing import Pool
#请求索引页
def get_page_index(offset,keyword):
#传送的数据
data={
'offset': offset,
'format': 'json',
'keyword': keyword,
'autoload': 'true',
'count': '20',
'cur_tab': 1
}
#自动编码为服务器可识别的url
url="https://www.toutiao.com/search_content/?"+urlencode(data)
#异常处理
try:
#获取返回的网页
response=requests.get(url)
#判断网页的状态码是否正常获取
if response.status_code==200:
#返回解码后的网页
return response.text
#不正常获取,返回None
return None
except RequestException:
#提示信息
print("请求索引页出错")
return None
#解析请求的索引网页数据
def parse_page_index(html):
#json加载转换
data=json.loads(html)
#数据为真,并且data键值存在与数据中
if data and 'data' in data.keys():
#遍历返回图集所在的url
for item in data.get('data'):
yield item.get('article_url')
#图集详情页请求
def get_page_detail(url):
#设置UA,模拟浏览器正常访问
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
#异常处理
try:
response=requests.get(url,headers=head)
if response.status_code==200:
return response.text
return None
except RequestException:
print("请求详情页出错")
return None
#解析图集详情页的数据
def parse_page_detail(html,url):
#异常处理
try:
#格式转换与图集标题提取
soup=BeautifulSoup(html,'lxml')
title=soup.select('title')[0].get_text()
print(title)
#正则查找图集链接
image_pattern = re.compile('gallery: (.*?),\n', re.S)
result = re.search(image_pattern, html)
if result:
#数据的优化
result=result.group(1)
result = result[12:]
result = result[:-2]
#替换
result = re.sub(r'\\', '', result)
#json加载
data = json.loads(result)
#判断数据不为空,并确保sub——images在其中
if data and 'sub_images' in data.keys():
#sub_images数据提取
sub_images=data.get('sub_images')
#列表数据提取
images=[item.get('url') for item in sub_images]
#图片下载
for image in images:download_images(image)
#返回字典
return {
'title':title,
'url':url,
'images':images
}
except Exception:
pass
#图片url请求
def download_images(url):
#提示信息
print('正在下载',url)
#浏览器模拟
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
#异常处理
try:
response = requests.get(url, headers=head)
if response.status_code == 200:
#图片保存
save_image(response.content)
return None
except RequestException:
print("请求图片出错")
return None
#图片保存
def save_image(content):
#判断文件夹是否存在,不存在则创建
if '街拍' not in os.listdir():
os.makedirs('街拍')
#设置写入文件所在文件夹位置
os.chdir('E:\python写网路爬虫\CSDN爬虫学习\街拍')
#路径,名称,后缀
file_path='{0}/{1}.{2}'.format(os.getcwd(),md5(content).hexdigest(),'jpg')
#图片保存
with open(file_path,'wb') as f:
f.write(content)
f.close()
#主函数
def mian(offset):
#网页获取
html=get_page_index(offset,'街拍')
#图集url
for url in parse_page_index(html):
if url!=None:
#图集网页详情
html=get_page_detail(url)
#图集内容
result=parse_page_detail(html,url)
if __name__ == '__main__':
#创建访问的列表(0-9)页
group=[i*10 for i in range(10)]
#创建多线程进程池
pool=Pool()
#进程池启动,传入的数据
pool.map(mian,group)
爬取图片如下
本文主要讲解了python爬虫库requests、urllib与OS模块结合使用爬取今日头条搜索内容的实例,更多关于python爬虫相关知识请查看下面的相关链接
来源:https://blog.csdn.net/jia666666/article/details/82154253
0
投稿
猜你喜欢
- //********************** index.asp ************************//<
- 一.概念简介 脚本:script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。 二.背景 近来在Wind
- 1.什么是搜索引擎?搜索引擎是“对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集、信息整理和用户查询三部分”。如图1是搜索引
- PHP计算字符串用strlen()只能得到字符串长度,不是宽高像素,使用到了php函数ImageTTFBBox(),就可以根据字体的大小和所
- 1.客户端的主页面:<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"
- 本文实例讲述了Python基于pandas实现json格式转换成dataframe的方法。分享给大家供大家参考,具体如下:# -*- cod
- 失效的书签们我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.jpg ),于是我们就默默的点了个收藏或者加书签。然而当我们面对成百
- 实现思路是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围8个像素进行判断,如果没有访问过,就保存起来,然后最后这
- 简介序列化的目的是方便数据的传输和存储,在PHP中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。反序列化中常见的魔
- 写在前面 最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。虽然昨天已经提交了项目,但有很多地方值得总结一下,比如这一篇,
- 拓扑排序几乎在所有的项目,甚至日常生活,待完成的不同任务之间通常都会存在着某些依赖关系,这些依赖关系会为它们的执行顺序行程表部分约束。对于这
- opendir – 打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir()
- 西贝做了许久的交互设计工作,每年的目标都有不同,却发现今年没有什么提高和改进的地方。也许是自己没有回头总结,总是被这样那样的借口推脱。最近休
- 原始需求:例如有一个列表:l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]希望把它转换成下面这种形式:[1, 2,
- 可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软件包的PKG格式代替二进制分发版来安装M
- 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验、净化和转换时,将会面临很大
- 很多时候我们都需要了解下python中导入包的属性方法信息,当然dir 是最便捷的了,不过如果想知道特定的,例如以_ 开头的属性,需要写个筛
- Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文
- 说明Django 默认的用户表 auth_user 包含 id, password, last_login, is_superuser, u
- DB2 存储过程:基础知识您在客户端工作站上对远程服务器和位于该服务器上的数据库进行分类的任何时候,都存在一个简单的 DB2 客户端/服务器