美文网首页
python爬虫编写笔记

python爬虫编写笔记

作者: Eren_Jaeger | 来源:发表于2019-04-17 21:22 被阅读0次

res = requests.get()

  • 以下的res都以此为基础

re模块的三个函数

  • search() : 匹配并输出第一个匹配到的字符
  • sub() : 替换
  • findall() : 匹配生成列表

re.findall()匹配特点:

  • 逐行匹配
  • 匹配结果会生成一个列表

re模块修饰符

  • re.S 匹配换行在内的所有字符
  • re.I 对大小写不敏感

非贪婪匹配

  • xx(.*?)xx : 把括号内匹配到的输出
  • 缺点 : 无法匹配到换行符

res.content.decode('utf-8)

  • 使用content输出的是二进制文件,这样就得有之后的解码过程decode
  • 不过这样有一个好处就是兼容性好,不会出现乱码的症状

res.text

  • 直接使用test将其转变成字符串形式,但有时会乱码

<p>(.*?)</p>

  • 通常以上面这种形式抓取文字类信息
  • 抓取到后记得要加回车符'\n'

res.status_code

  • 返回执行requests.get的执行信息

\d

  • 匹配一个数字,相当于[0-9]

\D

  • 匹配一个非数字字符

\d+

  • 匹配一个或者多个数字

\D+

  • 匹配一个或者多个非数字字符

如何制造大量的有规律的url

  • 利用列表生成式 ["www.baidubaoke{number}.com" for number in range(1, 10)]

如何同时处理多个列表

  • for a, b, c in zip(as, bs, cs):

re.sub 与replace

  • 两者都可用户字符串的替换
  • 但是明显re.sub功能更为强大一些,利用正则的匹配功能可以随意替换一些东西

lxml库

  • 此库需要依赖c语言环境,和Beautifulsoup相似

lxml库用法

  • 修正html代码 etree.HTML(text)
  • 读取html文件 etree.parse(filename)
  • 解析html文件 etree.tostring(html_element)

如果数据类型为列表结果,如何从列表结构里面获取字符串类型数据

  • 通过for循环依次打印,比如: for i in list1: print(i)
  • 通过列表的切片获得列表内的字符串,比如: str1 = list1.[0]

直接利用xpath定位到是什么?

  • 是element

如何将xpath定位到的element获取文字信息

  • 在利用xpath定位的时候在xpath路径后加上: /text()

在使用xpath定位+/text()后,得到的数据是什么类型?

  • 是列表

如何使用xpath定位循环点?

  • 1.首先找到要定位的元素,然后往上去翻,直到找到一个大标签,一般找一个有class属性的大标签
  • 2.定位循环点之后,抓取内容并用len查看元素个数,确认是否准确

学会变量赋值表达式

  • comment = comments[0] if len(comments) != 0 else "空"

写入内容到csv表格

  • 1.导入csv模块,import csv
  • 2.定义一个writer,writer = csv.writer(filename)
  • 3.调用writer写入内容,writer.row(('str1', 'string2'))
  • 4.需要注意的是,写入的内容一定要是元祖格式,所以()里面还要有一个()

在写入中文到csv时乱码,怎样解决?

  • 在使用open()打开文件的时候,在()里面加上 encoding='utf-8-sig'

写入内容到excel表格

  • 导入xlwt模块
  • 定义一个book book = xlwt.Workbook(encoding='utf-8')
  • 定义一个sheet sheet = book.add_sheet('sheetname')
  • 通过sheet写入内容 sheet.write(m, n, 'data') 这里m为行,n为列,都从0开始
  • 保存为xls文件 book.save('filename')
  • 注意写入技巧:可以利用多列表,外列表内包含的是整行内容,内列表包含的单个列的一个数据

json数据格式特点

  • json数据是个字符串
  • json数据里面是个字典
  • json数据里面字典的元素可以对应一个列表,而列表又可以嵌入字典
  • jsonstring = '{"user_man": [{"name": "Perter"}, {"name": "Anni"}], "user_woman": [{"name": "xiaoming"}, {"name": "zhangsan"}]}'

json数据解析

  • 导入json库 import json
  • 解析成json_data json_data = json.loads(jsonstring)

如何保存图片信息

  • 需要找到真正的图片下载链接
  • 需要把response变成byte内容
  • 使用open创建文件操作 open(filename_path, 'wb')
  • 写入图片内容 f.write(res.content)
  • 退出文件 f.close()

如何插入数据到mongodb

  • 安装pygongo模块并导入 import pymongo
  • 创建数据库 mydb = pymongo.MongoClient('ip地址信息', '端口号')
  • 创建表 test = mydb['表名']
  • 插入数据 test.insert_one({集合A})

如何把mongodb表中的数据导出成csv格式

  • 使用bin目录下的mongoexport工具
  • 使用方法: mongoexport -d mydb -c test --csv -f name,sex,grade -o test.csv
  • 相关参数解释: -d 数据库名称 -c 表名 -f 指定要导出的字段名 -o 导出的文件名

mongodb可视化管理工具

  • Robomongo 3T

多进程处理

  • 导入multiprocessing模块 import multiprocessing
  • 创建多进程池 pool = multiprocessing.Pool(processes=2)
  • 使用多进程池调用map pool.map(func, iterable)

何为异步处理

  • 有些元素在html代码中看不到其存在,但仍在界面上显示,这种一般就采用了异步加载技术
  • 切换界面后发现url并没有发生变化,像这种也是异步加载的表现
  • 针对异步加载,需要打开浏览器network功能,点开XHR,然后操作网页会发现加载一些文件,点开这些文件可以查找到我们需要的信息

lxml代码

html代码

异步加载ajax的表现

  • 点击一个页面的其他内容后,页面的url并没有发生变化
  • 打开network选项后,下滑滚轮可以看到加载类似的文件,而文件内容恰好是滚轮下滑的内容

处理异步加载的动态网站

  • 进行构造url,然后抓取内容

表单交互与模拟登陆

  • 表单登陆需要编写post的内容 params = {'name':'13361012765','password':'123'} res = requests.post(url, data=params)
  • 模拟登陆需要在headers中假如cookie headers={'cookie': 'xxxx'}

如何获取post表单的关键字段

  • 在输入用户名密码的时候,打开浏览器network选项,然后故意输错用户名和密码,在加载的文件中找寻post请求

当response返回json数据时如何使用?

如何使用selenium配合写爬虫?

  • 使用selenium操作网页
  • 操作完之后使用.page_source获取html信息 html = browser.page_source
  • 这个时候一般再使用etree.HTML去解析html文件

相关文章

网友评论

      本文标题:python爬虫编写笔记

      本文链接:https://www.haomeiwen.com/subject/whhfwqtx.html