12天Python爬虫学习的总结和思考

爬取网页的过程
1.发送请求和获取相应
2.对获取的response进行想要的信息的提取
3.对信息进行存储

(1)发送请求和相应
基本的是requests库的使用
共有参数:
headers
headers以字典形式添加,有的网页需要多一点的头部信息才可以获得响应。可以人为的删除一些没必要的头部信息。
nb一点的用法,生成随机的头部信息用fake_useragent这个库,要pip install 一下。

from fake_useragent import UserAgent
UA = UserAgent().random

params
这个参数是以字典的添加是要以字典的形式,添加了params就是在url后面多了一些参数以?&xxxxx&xxxxx加在后面表示,一般很少用这个参数,因为这部分一般是直接对应输入的变量代替。

verify
有的网站爬取时会产生SSL错误,可以再请求的时候加上verify = False 就可以避免这种情况发生。

import requests
response = requests.get(url,headers=headers,verify=False).content.decode()

proxies
用来进行IP代理,防止同一个IP使用此处太多和访问太频繁而被网站发现和封掉,也是字典用法。

import requests
proxies = {
        'http': '1.197.204.204',
    }
response = requests.get(url,headers=headers,proxies=proxies)

然后最常用的就是get()方法了,其次是post()方法,模拟登录的时候最好用post,具体得看一下,network部分的信息,看Request Method它用啥方法提交的申请,程序就用对应的方法去提交申请。如果是get方法就注意一下最下面的Query String部分,如果是post就注意下一最下面的From data部分,这个具体就是动态网页的分析了。

维持会话有两个方法,一个是加上Cookies信息,另一个是用session()

import requests
#1.创建一个session对象
#2.用session发送一个get或者post请求
session = requests.session()
response = session.get(url,headers)

(2)对获取的response进行想要信息的提取
基本的是BeautifulSoup,Xpath,re对xml格式进行信息提取,和jsonpath对json格式进行信息提取

BS,主要是select,get方法。我用得少。

Xpath逻辑很清晰,思路是“找到循环节点,然后找大循环,拼接循环内部的Xpath路径”,返回的是一个列表。感觉很好用,但有时挺麻烦。注意数数是从1开始数,区别与其他东西

re的进行信息的提取,有的信息用re提取很简单,最主要用的是re.findall(),返回一个列表。还有使用re.sub()对信息进行过滤。

如果一段文字里面有一些标签要阻碍你提取,比如一篇文章里面他想让你爬取难一丢丢,在里面多加了一些<>标签,并且这些标签是一样的,这个时候有两种方法解决1.提取所有这个标签里面的信息返回一个列表,对列表使用 ‘’.join(list)这个方法
返回一个完整的字符串。2.用re.sub()方法直接把里面的<>标签匹配并替换掉。

jsonpath,只要会Xpath,jsonpath就不是问题了,用来对json格式的数据进行提取。首先要loads一下,把json对象转换为python对象。然后用字典的方式或者jsonpath进行提取。要去补一下字典的知识了。。。

(3)对信息进行存储

txt格式

def write_file(html):
    soup = BeautifulSoup(html,'lxml')
    texts = soup.select('div.articlecon > p')
    for text in texts:
        real_text = text.get_text()
        file.write(real_text+'\n')

csv格式
方法1,用csv模块

import csv

fp = open('D:/网易云音乐Top200.csv','wt',newline='',encoding='utf8')
writer = csv.writer(fp)
writer.writerow(('a','b','c','d'))
....
....
....
for ....
	writer.writerow((a,b,c,d))

方法2,用xlwt模块

import xlwt

def getExel(mylist):   
    #表头的标题
    header = ['','','']
    book = xlwt.Workbook(encoding='utf-8')
    sheet = book.add_sheet('Sheet1')
    for k in range(len(header)):
        sheet.write(0,k,header[k])
    i = 1#注意要从1开始,上面那一行标题已经占了一行
    for list in mylist:#一个二重循环
        j = 0
        for data in list:
            sheet.write(i,j,data)
            j += 1
        i += 1
    book.save('D:/test.xls')
   

方法三,pandas库,还不会。。

json格式:无

数据库MongoDB

import pymongo
#连接数据库
client = pymongo.MongoClient('localhost',27017)
mydb = client['xxxx']
yyyy = xxxx['yyyy']
....
....
....
for .....
	data = {
		....
		....
		....
	}
	yyyy.insert_one(data)

图片存储
方法1,requests库

path = 'D:/whatphoto'
url = 'xxxxxxxxxxx.jpg'
data = requests.get(url,headers = headers)
fp = open(path+ url[-10:],'wb')#注意写进文件时,切片的字符串名字不可有/出现
fp.write(data.content)
fp.close()

方法2,用urllib库
用urlretricev(url,path)

from urllib.requests import urlretrieve
url = '......'
path = '........'
urlretrieve(url,path)

对静态网页和动态网页的理解

静态网页
静态网页,及东西是不变的,翻页是跟表面的url变化而变化,一次性就加载完源代码里面的html的信息。一般用解析xml 的方法进行解析就可以了

动态网页
翻页的时候表面的url没有变化,用开发者工具进行观察时,可能是Ajax接口,用隐藏的url加载xml数据或json数据。这种就要用抓包找到url的变化规律对url进行遍历,后面就变成解析静态网页一样的了。另一种比较特别的是,其抓包抓到的url是没有变化的,是通过post方法,提交表单的时候表单里面的字段在变化,然后服务器根据你表单里面的字段给你相应不同的json文件。栗子:拉勾网

面向对象的理解
尝试了用面向对象编写爬虫程序,对面向对象的理解:什么是对象?对象就是客观存在的一个东西,比如一只木椅子,而如果我要表示一类椅子,用程序表示,那么我们就要把椅子进行抽象化,这就要定义一个class来封装这个抽象化以后的东西,这就是类。而我要根据这个类产生一个东西,就是实例化。

会什么和不会什么
我学会了什么:请求方式,Xpath,re,用面向对象编写爬虫,mongodb数据库的存储,txt、csv、xlwt的存储方式,BS的select。Ajax的分析和动态json的分析。基本的多进程爬虫,词云的生成。

不熟悉:BS没有系统的学习,只会select,jsonpath为完全熟练。深入的多线程爬虫

待学习:Scrapy框架,模拟登陆,os模块,MySQL数据库,selenium的使用,验证码处理,反爬虫处理,分布式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值