第六章python网络爬虫(不带验证和代理)

python

网络爬虫

爬虫:爬虫步骤:1、通过网络地址获取网络页面。2、对网络页面内容的解析。3、爬取数据放到本地。4、使用爬取的本地数据。。
1、示例:获取网页内容。

import requests as rq
url='https://www.guazi.com/sh/buy/'
def gethtmlcontent(url):
   try:
       #请求方式和设置超时
       r=rq.get(url=url,timeout=30)
       #异常捕获
       r.raise_for_status()
       return r.text
   except:
       return ''
print(gethtmlcontent(url))

结果
在这里插入图片描述
1、示例:对网页内容解析,并保持数据到本地。

import requests as rq
import re
#爬取路径URL
url='https://www.ivsky.com/tupian/index_2.html'
data=rq.get(url).text
#分析所需要的内容
reg=r'<img src=\"(.*?.jpg)\"'
#形成对象,是下载速度提高
pa=re.compile(reg)
#获取匹配的所有结果
m=re.findall(pa,data)
i=1
for iurl in m:
   print('正在爬取http:'+iurl)
   #获取独立内容
   idata=rq.get('http:'+iurl)
   with open('E:\\python\\Infrastructure\\第七章\\img\\'+str(i)+'.jpg','wb') as f:
       try:
           #保存所需内容,如果出错将继续往下执行
           f.write(idata.content)
       except:
           continue
       f.close()
       i += 1
print('爬取完毕')

结果内容将保存到我们定义的路径下面。
在这里插入图片描述

爬取电影网站并保存图片到本地

下载电影图片:以2345影视网站为主。获取本页电影名称,主演,上映时间,简介和保存图片到本地文件。其次,点进去查看获取推荐的电影名称,主演以及评分。新建一个文件用于存储图片。例如film文件。
getHTML:获取网站全部脚本。saveInfo:解析网站,获取需要的数据。child:跳转子网站获取对应数据。main:函数入口。main()启动函数。
示例

import requests
from bs4 import BeautifulSoup
import random
img=[]
#获取整个页面内容函数
def getHTML(url):
   try:
       #获取页面,延时设为20秒,time为限制请求时间
       rq=requests.get(url,timeout=20)
       #判断返回的状态码是否为200,如果是返回正确内容,不是则产生页面请求异常
       rq.raise_for_status()
       #编码格式,可以用gb2312或者gbk,如果用utf-8则会乱码,已亲测。
       rq.encoding='gb2312'
       #判断是否请求到,可以先打印出整个页面脚本
       #print(rq.text)
       return rq.text
   except:
       return ""
def saveInfo(html):
   #解析的网站,解析是按照html解析,以下是常见的。详情见官网文档
   #html.parser:内置库,速度适中,容错能力强
   #lxml:速度快,容错能力强,但是需要C语音库支持
   #html5lib生成HTML5文档格式,速度慢,无外部扩展依赖
   soup=BeautifulSoup(html,'html.parser')
   #找到需要内容位置,用类选择器选择,<ul class='picList clearfix'>
   m_ls=soup.find('ul',class_='picList clearfix')
   #我们需要的是li下面二个div标签里面数据,
   ms=m_ls.find_all('li')
   #打印出所有li标签及其内容数据
   #print(ms)
   for top in ms:
       #查看所有图片,获取图片路径src的地址
       img_url=top.find('img')['src']
       #获取li div p span的标签,<span class='sTit'>的文本也就是电影名称
       name=top.find('span',class_='sTit').get_text()
       #获取下一个页面存在的位置
       child_span=top.find('span',class_='sTit')
       #获取下一个页面部分路径
       parmurl=child_span.find('a')['href']
       img.append('http:'+parmurl)
       #图片对应下一个页面
       #'http://dianying.2345.com/detail/207868.html' 下一个页面地址
       #print(parmurl)
       try:
           # 获取li div p span的标签,<span class='sIntro'>的文本也就是电影上映时间
           #有的没有上映时间,所以加个过滤
           tm=top.find('span',class_='sIntro').get_text()
       except:
           tm='上映时间'
       try:
           #获取主演数据,
           actors=top.find('p',class_='pActor')
           actor=''
           for act in actors.contents:
               #把主演放在一起拼接
               actor=actor+act.string+','
       except:
           actor='无演员'
       #电影简介,如果存在隐藏简介的,直接获取全部显示数据。如果不存在直接获取。
       if top.find('p',class_='pTxt pIntroHide'):
           intro=top.find('p',class_='pTxt pIntroHide').get_text()
       else:
           intro=top.find('p',class_='pTxt pIntroShow').get_text()
       #print('影片:{}\t{}\n{}\n{}\n\n'.format(name,tm,actor,intro))
       with open('E:/python/Infrastructure/film/'+name+'.jpg','wb+')as f:
           img_url='http:'+img_url
           imgdata=requests.get(img_url).content
           f.write(imgdata)
def child(parmurl):
   htmlcontent=getHTML(parmurl)
   sp = BeautifulSoup(htmlcontent, 'html.parser')
   m_ls = sp.find('ul', class_='v_picTxt pic167_223 clearfix')
   ms = m_ls.find_all('li')
   for tp in ms:
       #图片
       img_url = tp.find('img')['data-src']
       #电影名称
       nme = tp.find('span', class_='sTit').get_text()
       #主演
       acs = tp.find('span', class_='sDes').get_text()
       #打分
       sco = tp.find('p', class_='pRightBottom').get_text()
       #print('影片:{}\t{}\n{}\n\n'.format(nme,acs,sco))
       with open('E:/python/Infrastructure/film/'+nme.strip().replace("\n", "")+ '.jpg','wb+')as f:
           img_url = 'http:' + img_url
           imgd = requests.get(img_url).content
           #'http://imgwx1.2345.com/dypcimg/img/e/67/sup201474_223x310.jpg'
           f.write(imgd)
def main():
   url='http://dianying.2345.com/top/'
   html=getHTML(url)
   saveInfo(html)
   for curl in img:
       child(curl)
main()

结果
在这里插入图片描述

如有错误请联系更改:微信 sy157715743

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值