首页 > 其他分享 >爬虫实战入门

爬虫实战入门

时间:2022-12-01 19:11:24浏览次数:42  
标签:实战 入门 url text resp 爬虫 re link result

爬虫0(正则表达式查找,get)

11月15日

##获取豆瓣电影top250



import requests
import re


#首先获取url,然后用浏览器F12发现是get请求
url='https://movie.douban.com/top250'
headers={
'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
}
i=0

for i in range(0,226,25):
    ##发送请求,拿到网页源代码
    ##把param放到这里是因为这个网页每25个电影为一页
    ##如果我想获取top250,就需要跳转10次
    param = {
        'start': i,
        'filter': ''
    }
    resp=requests.get(url,headers=headers,params=param)
    text=resp.text


    ##通过正则表达式找到名字
    obj=re.compile(r'<div class="info">.*?<span class="title">(?P<name>.*?)</span>',re.S)
    result=obj.finditer(text)
    for name in result:
        print(name.group('name'))



##记得关闭通道
resp.close()

获取豆瓣电影top250

使用request和re方法

爬虫1 (正则表达式查找,进入子链接,get)

11月16日

import requests
import re
import urllib3
headers={

}
url='https://www.dytt89.com/'
resp=requests.get(url,verify=False)
resp.encoding='gb2312'
resp_text=resp.text

obj=re.compile(r'2022必看热片.*<ul>(?P<ul>.*?)</ul>',re.S)
resule=obj.finditer(resp_text)
for it in resule:
    ul_text=it.group('ul')
son_link_list=[]
obj2=re.compile(r"href='/(?P<son_link>.*?)' title=")
result1=obj2.finditer(ul_text)
for son_link in result1:
    tem=son_link.group('son_link')
    son_link_list.append(tem)


for son_link_tem in son_link_list:
    url_tem=url+son_link_tem
    print(url_tem)
    urllib3.disable_warnings()
    resp=requests.get(url_tem,verify=False)
    resp.encoding = 'gb2312'
    resp_text=resp.text
    obj3=re.compile(r"<title>(?P<name>.*?)_电影天堂</title>",re.S)
    result_tem=obj3.finditer(resp_text)
    for name in result_tem:
        print(name.group("name"))

    obj4=re.compile(r"<tr>.*?<td style=.*?<a href=\".*?\">(?P<link_xunlei>.*?)</a>.*?</tr>.*?</tbody>",re.S)
    result_tem = obj4.finditer(resp_text)
    for link in result_tem:
        print(link.group("link_xunlei"))
        print('\n')
        break
resp.close()

采用requests库和re库

通过request发送get or post请求,得到网页源代码,然后用正则表达式搜索源代码文本,找到电影子链接并进入,拿到电影名称以及他的磁力链接


爬虫2(找到菜名,菜价 post)

(post方式)

import requests
import re

url='http://www.xinfadi.com.cn/getCat.html'
headers={
'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'

}
dw={
'prodCatid'	:"1186"
}

resp=requests.post(url,headers=headers,data=dw)
text=resp.text
obj1=re.compile(r'"prodName":"(?P<prodName>.*?)"',re.S)
obj2=re.compile(r'"lowPrice":"(?P<lowPrice>.*?)"',re.S)
obj3=re.compile(r'"highPrice":"(?P<highPrice>.*?)"',re.S)
result1=obj1.finditer(text)
result2=obj2.finditer(text)
result3=obj3.finditer(text)

for find in result1:
	print(find.group('prodName'))
for find in result2:
	print(find.group('lowPrice'))
for find in result3:
	print(find.group('highPrice'))



抓包找post

模拟发送请求得到响应,然后对响应分析

找出了菜名,菜的最低价、最高价

当然这个没排序,学会导出表格的话应该还凑活用。。

爬虫3(豆瓣top250 demo版本,采用bs4中的BeautifulSoup函数)

##采用bs4中的BeautifulSoup 通过标签来查找内容

#首先还是获得页面源代码
import requests
from bs4 import  BeautifulSoup
url='https://movie.douban.com/top250'
headers={
'User-Agent':
	'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
}
resp=requests.get(url,headers=headers)
page=BeautifulSoup(resp.text,"html.parser") ##注意这里,通过这个函数获取了page,为了后面能查标签,"html.parser"是为了告诉这个函数你前面那个是什么文件
result1=page.find("ol",class_='grid_view' )##find是找到一个就返回,find_all是全找到
result2=result1.find_all('span',class_='title')[0:]  ##找到很多的话,直接切片
for tem in result2:
	tds=tem.text #找到被标签标记的内容
	print(tds)
	print('\n',end='')


resp.close()

采用bs4库中的Beautifulsoup函数

通过标签来查找内容


爬虫4:

使用了正则表达式和BeautifulSoup

报错了

爬整个网站的图:(太爽了)

import requests
from bs4 import  BeautifulSoup
import re

##拿到页面源代码
for i in range(1,251,1):
	url_raw='http://www.netbian.com/'
	if(i!=1):
		son_url=f'index_{i}.htm'
	else:
		son_url=''
	url=url_raw+son_url
	headers={
	'User-Agent':
		'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0'
	}

	#抓取子链接
	resp=requests.get(url,headers=headers)
	resp.encoding='gbk'
	page=BeautifulSoup(resp.text,'html.parser')
	result=page.find('div',class_='list')
	obj=re.compile(r'<a href="(?P<href>.*?)"',re.S)
	href_list=obj.finditer(str(result))
	for href in href_list :
		if href.group("href")[0]!= 'h':
			chilf_href=href.group("href").strip('/')
			link=url_raw+chilf_href
			##套娃,再次进入子链接
			resp=requests.get(link)
			resp.encoding='gbk'
			page=BeautifulSoup(resp.text,'html.parser')

			result=page.find('div',class_='endpage')
			result=result.find('div',class_="pic")
			obj=re.compile(r'src="(?P<link>.*?)"',re.S)
			result_list=obj.finditer(str(result))
			for link in result_list:
				print(link.group("link"))
resp.close()

标签:实战,入门,url,text,resp,爬虫,re,link,result
From: https://www.cnblogs.com/Hznuxxw/p/16942403.html

相关文章

  • 会话技术-Cookie-快速入门、原理分析
    会话技术-Cookie-快速入门1.概念:客户端会话技术,将数据保存到客户端2.快速入门: 使用步骤: 1.创建Cookie对象,绑定数据 ......
  • 《maven实战》学习--部分摘自许晓斌博客
    部分摘自许晓斌博客:https://juvenshun.iteye.com/blog/2068151.简介:Maven不仅仅是一个工具,它更是一种先进的理念,其一是"约定优于配置(ConventionOverConfiguration)",只要......
  • xml_解析_Jsoup_快速入门与xml_解析_Jsoup_Jsoup对象
    xml_解析_Jsoup_快速入门 Jsoup:jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQ......
  • 超详细Netty入门,看这篇就够了!
    简介: 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。 思维导图前言本文......
  • Ansible入门
    Ansible入门https://www.jianshu.com/p/c82737b5485chttps://blog.csdn.net/pushiqiang/article/details/78126063......
  • 【译】Apache Kafka 快速入门
    编译自官方文档。第1步:获取Kafka下载最新版本(当前为v3.3.1)的Kafka并解压:$tar-xzfkafka_2.13-3.3.1.tgz$cdkafka_2.13-3.3.1第2步:启动Kafka环境注......
  • Servlet_概述以及快速入门
    Servlet_概述serverapplet概念:运行在服务器端的小程序Servlet就是一个接口,定义一个Java类被浏览器访问到(tomcat识别)的规则将来我们自定义一个类,实......
  • JAVA入门
    JAVA入门特性和优势简单性面向对象可移植性(JVM)高性能分布性动态性多线程安全性健壮性三大版本JavaSE:标准版(桌面程序,控制台开发...)JavaME:嵌入式......
  • Redis 入门、安装及操作
    一、入门Redis:可以作用于数据库、缓存和消息中间件。官网:https://redis.ioRedis是开源的键值对(key:value)数据库。存储类型比较丰富,也被称为NoSql数据库......
  • 高质量泛光(Bloom)从理论到实战
    泛光(Bloom)是现代电子游戏中常见的后处理特效,通过图像处理算法将画面中高亮的像素向外“扩张”形成光晕以增加画面的真实感,能够生动地表达太阳、霓虹灯等光源的亮度。Bloom......