python爬虫初了解

python爬虫

  • 网络爬虫是一种按照一定的规则,自动地抓取万维网地程序或者脚本
  • 爬虫的基本思路
    ①构造目标网址
    ②发起请求(使用request模块),相当于点开网页
    ③获取网页内容
    ④定制筛选器,对内容进行筛选(正则)
    ⑤把爬取的结果保存到容器里

request模块

request是使用apach2 licensed许可证的http库,支持http连接保持和连接池,支持使用cookie保持会话,文件上传,自动响应内容的编码,还有国际url和post数据自动编码

  • 利用request模块get请求网站:r = request.get('url')
    post请求:r=request.post('url')
    请求下来的r对象具有多种访问方法,r.text就是正文内容

但是爬虫有个问题,爬虫所发的http request包里的user-agent: python-requests/2.21.0具有明显的爬虫特征,就像awvs扫描器ua头带有awvs一样,很容易被封掉

向网站发起http请求代码:

import requests
payload={'a':1,'b':2}#字典
proxies1 = {
	"http": "http://127.0.0.1:8080",#本地socket
	"https": "http://10.10.1.10:1080",#代理socket
}
res1 = requests.get('http://目标ip/1.txt',proxies=prixies1)#get请求
res2 = requests.post('http://目标ip/1.txt',data=payload)#POST请求至少要带一个参数
print res1.text#返回正文内容
print res1.url#返回url

实战

扫描一个网站的实例:(比如网站为www.csdn.net)
现在的需求是扫描出网站每页的html代码(不知道http请求的前往http协议补课)

写爬虫步骤:

  1. 找到页面切换的变量在哪个链接
  2. 找到页面切换的变量和其他一起访问时要提交的数据
#!usr/bin/python

import requests
import json
import urllib

def page(i):
	get_hearder = {
		"Host": "www.csdn.net",
		"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4464.5 Safari/537.36",
		"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
		"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
		"Accept-Encoding": "gzip, deflate, br",
		"Connection": "keep-alive",
		"Upgrade-Insecure-Requests": "1",
		"Sec-Fetch-Dest": "document",
		"Sec-Fetch-Mode": "navigate",
		"Sec-Fetch-Site": "none",
		"Sec-Fetch-User": "?1"
		#构造一个post请求包,注意http头和数据要双引号
	}
	data_post=		{'courseTage':'','courseDiffcuty':'','pageIndex':i}
	#页数是pageIndex,还要其他一些需要爬取的信息
	rep = request.post('https://www.csdn.net/courses/ajaxcourses,headers=get_header,data=data_post)#页面切换的代码在ajaxCourses
	data=json.loads(rep.text)#返回结果为Json格式,用json的load处理
	for name in data['course']['result']:
		print (name['courseName'])#courseName字段在result下,result字段在course下,他们之间的关系类似一级二级三级标签
for i in range(1,19):
	lesson(i)#19为总页数,遍历页数i提交数据包

posted on   小丑首长  阅读(14)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示