proyecto del rastreador de Python

reptil

Núcleo del rastreador: use solicitudes para obtener el código fuente de la página web y luego use el filtrado coincidente para obtener lo que desea

Escalar fotos

Ideas: ①Solicite la
url y devuelva el código fuente de la url.
②Use expresiones regulares o "parameters.findall ()" para hacer coincidir las imágenes en la url. ③Utilice la
generación de ciclos para
descargar. Método de descarga
1. Use con open () como fp: fp .write () comando para descargar

with open("dy.txt","w",encoding="utf-8") as fp:
        fp.write(cs)
        #或者类写法
         fp.write("{}\n".format(cs))
  

2. Use el comando urlretrieve (url, filename, None) para descargar
3. Use la idea de PIL + solicitudes + BytesIo para descargar

#无效的参数类,典型导致的原因是变量设置可能出错导致
#'set' object has no attribute 'items'典型就是变量设置处出现问题导致
import requests
import re
import urllib.request
#注意没有这个属性类导致原因,即属性值类发生错误类导致
def open(url):
 headers={
    
    
     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 QIHU 360SE',
     }
 response=requests.get(url=url,headers=headers)
 response.conding='utf-8'
 html=response.text
 return (html)

def getimg(html):
    p=r'<img class="BDE_Image" src="([^"]+\.jpg)"'
    imglist=re.findall(p,html)
    for i in imglist:
        print(i)
        filename=i.split('/')[-1]
        urllib.request.urlretrieve(i,filename,None)

if __name__=='__main__':
    url='https://tieba.baidu.com/p/5704651315'
    getimg(open(url))

El tercer método de descarga

import requests
from PIL import Image
from io import BytesIO

response = requests.get(img_src)
image = Image.open(BytesIO(response.content))
image.save('D:/9.jpg')

Como rastrear la barra de correos de Baidu

#python爬取网页时返回http状态码HTTP Error 418 即反爬程序返回导致,典型绕利用requests的请求方式进行请求代
import urllib.request
import re
import os
import urllib
#根据给定的网址来获取网页详细信息,得到的html就是网页的源代码 
def getHtml(url):
  page = urllib.request.urlopen(url)
  html = page.read()
  return html.decode('UTF-8')
 
def getImg(html):
  reg = r'src="(.+?\.jpg)" pic_ext'#另外一种匹配方式
  imgre = re.compile(reg)
  imglist = imgre.findall(html)#表示在整个网页中过滤出所有图片的地址,放在imglist中
  x = 0
  path = 'D:\\test'
  # 将图片保存到D:\\test文件夹中,如果没有test文件夹则创建
  if not os.path.isdir(path): 
    os.makedirs(path) 
  paths = path+'\\'   #保存在test路径下 
 
  for imgurl in imglist: 
    urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打开imglist中保存的图片网址,并下载图片保存在本地,format格式化字符串 
    x = x + 1
  return imglist




html = getHtml("https://photo.ihansen.org/trending")#获取该网址网页详细信息,得到的html就是网页的源代码 
print (getImg(html)) #从网页源代码中分析并下载保存图片

Rastreo de datos de texto

1. Rastrear una sola clase

Ideas de rastreo

  1. Use xpath para rastrear con la biblioteca de solicitudes (generalmente adecuado para rastrear la red de información de películas de Douban)
#即导入使用的三个库
import requests
from lxml import html
etree=html.etree
url='https://www.nchu.edu.cn/xwzx/chyw/content_89584'
headers={
    
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
rs=requests.get(url=url,headers=headers).text
#利用xpath解析数据
s=etree.HTML(rs)
nr=s.xpath('//*[@id="content"]/div/article/div[2]/div[2]/p[6]/text()')
print(nr)
  1. Use la expresión regular r '' para hacer coincidir las clases de reglas
    (generalmente se usa para rastrear novelas)
import requests #导入必备神器requests
import re #导入正则

url='http://www.jjwxc.net/onebook.php?novelid=109034&chapterid=4' 
response=requests.get(url)
response.encoding='gb2312'#根据要爬的网页的编码进行编码
html=response.text #转换成文本

info=re.findall(r'<div style="clear:both;"></div>([\s\S]*)<div id="favoriteshow_3" style="display:none" align="center"></div>',html)[0] #用什么形式展示返回的值

print (info)
#使用正则进行匹配小说内容
#print(info)#打印                      

2. Rastrear varias clases

  1. Utilice solicitudes xpath + para rastrear un formato de ideas de información de datos

Rastrear información de datos en la plataforma del rastreador
Punto clave: cambio de página
①La posición coincidente de info.xpath (es decir, use la consola para obtener su xpath, luego estudie la diferencia y elimine un estado de variable) ②Ciclo de
control de la página para cambiar la idea (igual que arriba, es decir, encuentre la diferencia, use el formato (un valor * )

#即需要使用的三个库
#即需要使用的三个库
import requests
from lxml import html
etree=html.etree
with open("dy.txt","w",encoding="utf-8") as fp:
 for a in range(10):#控制翻页的作用
  url='https://ssr1.scrape.center/page/{}'.format(a*1)
  headers={
    
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
  rs=requests.get(url=url,headers=headers).text
#即代解析数据思路
  s=etree.HTML(rs)
  fy=s.xpath('//*[@id="index"]/div[1]/div[1]/div')#每一页的,思路即利用每一页的不同获取通用的
  for info in fy:
    cs = info.xpath('./div/div/div[2]/a/h2/text()')[0]#即无[]的含义,注意如果有标签类,注意利用引用标签的思路代,即有标签名即@标签名,如@title 无就/text()
    fp.write("{}\n".format(cs))  
  1. Rastreo de ideas de contenido para todo en un sitio web,
    como rastreo de novelas
    Cuatro subfunciones + una función principal
    Use la forma de la llamada para obtener el contenido. Por
    ejemplo,
    una función para obtener una lista de todas las novelas (usando su enlace de retorno),
    una para obtener el código fuente en el enlace y
    otra para que coincida con el código fuente (que coincida con todos los capítulos en el código fuente y su correspondiente dirección URL)
    Una función para obtener el contenido de la URL puede ser
    un código fuente escrito por otros para esta.

import requests
from bs4 import BeautifulSoup
import time
import codecs

start = time.clock()

#在小说大全界面获取所有小说名单
novellist = {
    
    }
def getnovels(html):
    soup = BeautifulSoup(html,'lxml')
    list = soup.find('div',class_='novellist').find_all('a')
    baseurl = 'http://www.paoshu8.com'
    for l in list:
        novellist[l.string] = baseurl+str(l['href']).replace('http:','')

#获取页面html源码
def getpage(url):
    headers = {
    
    
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    page = requests.get(url).content.decode('utf-8')
    return page

chaptername = []  #存放小说章节名字
chapteraddress = []     #存放小说章节地址
#获取小说所有章节以及地址
def getchapter(html):
    soup = BeautifulSoup(html,'lxml')
    try:
        alist = soup.find('div',id='list').find_all('a')
        for list in alist:
            chaptername.append(list.string)
            href = 'http://www.paoshu8.com'+list['href']
            chapteraddress.append(href)
        return True
    except:
        print('未找到章节')
        return False

#获取章节内容
def getdetail(html):
    soup = BeautifulSoup(html,'lxml')
    try:
        content = '     '
        pstring = soup.find('div',id='content').find_all('p')
        for p in pstring:
            content += p.string
            content += '\n      '
        return content
    except:
        print('出错')
        return '出错'

url = 'http://www.paoshu8.com/xiaoshuodaquan/' #小说大全网址
html = getpage(url)
getnovels(html)  #获取小说名单

name = input('请输入想要下载小说的名字:\n')
if name in novellist:
    print('开始下载')
    url = str(novellist[name])
    html = getpage(url)
    getchapter(html)
    file = codecs.open('F:\文档'+name+'.txt','w','utf-8')  #小说存放在本地的地址
    count = len(chapteraddress)
    for i in range(len(chapteraddress)):
        curl = str(chapteraddress[i])
        chtml = getpage(curl)
        content = '\n' + getdetail(chtml) + '\n'  #为了保持小说有格式
        title = '\n           第'+str(i+1)+'章  '+str(chaptername[i])+'         \n'
        file.write(title+content)
        print('{:.3%}'.format(i/count)+'  '+chaptername[i])
    file.close()
    end = time.clock()
    print('下载完毕,总耗时',end-start,'秒')
else:
    print('未找见该小说')

Rastreo de una clase de enlace de recursos del diccionario Qianqian

import requests
import re
import time
from bs4 import BeautifulSoup
from lxml import html

start=time.clock()
with open("qqzd.txt","w",encoding="utf-8")as fp:
 x=int(input("请输入需要爬取的页数:\n"))#将input的值转换为整数值的方法
 for i in range(x):#更改爬取页数
     url='https://myqqjd.com/android/page/{}'.format(i*1)
     headers={
    
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
     rs=requests.get(url=url,headers=headers).text
     fy=re.findall(r'<h2 class="entry-title">([\s\S]*?)</h2>',rs)#匹配网页
     #即对于赋值正则表达式中的思路,必须使用解析器解析后才可进行赋值
     soup = BeautifulSoup(str(fy),'lxml')
     fs=soup.find_all('a')  
     for a in fs:
       b=a['href'].replace('https://myqqjd.com/','https://myqqjd.com/wp-content/themes/begin/down.php?id=')
       c=b.replace('.html','')
       response=requests.get(url=c,headers=headers).text
       d=re.findall(r'<div class="down-but"><a href="([\s\S]*?)" target="_blank"><i class="be be-download"></i> 网盘下载</a></div>	',response)
       print (a.string,d[0])
       fp.write("{}\n{}\n".format(a.string,d[0]))#消去[]号的作用
       end=time.clock()
     if i==(x-1):
       print ("爬取完成,总耗时",end-start,'秒')
    

Elementos de archivo combinados

Necesita el módulo
①xlrd (responsable de la lectura de datos)
②XlsxWriter (responsable de la escritura de datos)
③glob2 o glob3 (encuentre archivos que cumplan con su propósito)

Supongo que te gusta

Origin blog.csdn.net/qq_33942040/article/details/108355895
Recomendado
Clasificación