Python 网络爬虫 02

本文介绍了Python爬虫中re模块的使用,通过实例讲解如何从HTML中提取影片信息。同时,讨论了csv模块在数据存储中的应用。在数据存储部分,提到了Pymysql的安装与使用过程中遇到的ModuleNotFoundError问题及解决方案,包括设置PyCharm的解释器路径。此外,还解决了pycharm连接数据库时的DataError编码问题,强调了数据库创建时字符集的重要性。最后,简要提及了Requests库用于爬取并保存图片的功能。
摘要由CSDN通过智能技术生成

大佬学习文章:http://c.biancheng.net/python_spider/re-module.html

一、re 模块和 csv 模块

1、re 模块

方法参数介绍 / 用途
re.compile (pattern,flags=0)pattern:正则表达式;flags:代表功能标志位,扩展正则表达式的匹配。 flags=re.I|re.S,re.S 指可以匹配换行符
re.findall (pattern,string,flags=0)string:目标字符串
regex.findall (string,pos,endpos)pos: 截取字符串开始匹配位置;endpos 截取字符串结束匹配位置。
re.split (pattern,string,flags = 0)使用正则表达式匹配内容,切割目标字符串,返回值是切割后的内容列表。
re.sub (pattern,replace,string,max,flags = 0)使用一个字符串替换正则表达式匹配到的内容。返回值是替换后的字符串。
re.search (pattern,string,flags=0)匹配目标字符串第一个符合的内容,返回值为匹配的对象。

例:从 HTML 代码中使用 re 模块提取出两部影片的名称和主演信息

import re

html="""
<div class="movie-item-info">
<p class="name"><a title="你好,李焕英">你好,李焕英</a></p>
<p class="star">主演:贾玲,张小斐,沈腾</p></div>
<div class="movie-item-info">
<p class="name"><a title="刺杀,小说家">刺杀,小说家</a></p>
<p class="star">主演:雷佳音,杨幂,董子健,于和伟</p></div> 
"""
pattern=re.compile('<div.*?<a title="(.*?)".*?star">(.*?)</p.*?div>',re.S)
r_list=pattern.findall(html)
print(r_list)

在这里插入图片描述

2、 csv 模块

方法参数介绍 / 用途
csv.writer (csvfile, dialect=‘excel’, fmtparams)csvfile:必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象;dialect:编码风格,默认为 excel 的风格,也就是使用逗号,分隔;fmtparam:格式化参数,用来覆盖之前 dialect 对象指定的编码风格
csv.DictWriter (csvfile, fieldnames)以字典的形式写数据,fieldnames字段名,相当于key
csv.reader (csvfile, dialect=‘excel’, fmtparams)csvfile:必须是支持迭代(Iterator)的对象,可以是文件(file)对象或者列表(list)对象;dialect:编码风格,默认为 excel 的风格,也就是使用逗号,分隔;fmtparam:格式化参数,用来覆盖之前 dialect 对象指定的编码风格
csv.DictReader()以字典的形式读数据
writerow ()单行写入,列表格式传入数据
writerrows()多行写入
import csv
# 操作文件对象时,需要添加newline参数逐行写入,否则会出现空行现象
with open('names.csv', 'w', newline='') as csvfile:
    #构建字段名称,也就是key
    fieldnames = ['first_name', 'last_name']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    # 写入字段名,当做表头
    writer.writeheader()
    # 多行写入
    writer.writerows([{'first_name': 'Baked', 'last_name': 'Beans'},{'first_name': 'Lovely', 'last_name': 'Spam'}])
    # 单行写入
    writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

在这里插入图片描述

二、Pymysql实现数据存储

在 import pymysql 的时候 报错 import pymysql ModuleNotFoundError: No module named ‘pymysql’

解决办法:打开cmd -> pip install pymysql -> 找到 site-packages 安装路径 -> 在 pycharm 里面 interpreter paths 设置添加 -> 重新运行

在进行运行的时候报错:pycharm连接数据库出现‘pymysql.err.DataError: (1366,

查到是编码字符集的问题,我自作主张在创建数据库的时候将括号里面的去掉了,罪该万死
CREATE DATABASE maoyandb (CHARSET utf8);

# -*-coding:utf-8-*-
import pymysql

db = pymysql.connect(host='localhost',user='root',password='xxx',database='maoyandb')
'''创建cursor对象'''
cursor = db.cursor()
'''sql语句执行,列表元组'''
info_list = [('我不是药神','徐峥','2018-07-05'),('你好,李焕英','贾玲','2021-02-12')]
sql = 'insert into filmtab values(%s,%s,%s)'
'''executemany() 可以同时插入多条数据'''
cursor.executemany(sql,info_list)
db.commit()
cursor.close()
db.close()

成功!
在这里插入图片描述

三、Requests库

方法参数介绍 / 用途
requests.request()构造一个请求对象,该方法是实现以下各个方法的基础
requests.get (url,headers=headers,params,timeout,verify=False)GET 请求,表示向网站发起请求,获取页面响应对象。url:要抓取的 url 地址。headers:请求头信息。params:请求时携带的查询字符串参数。timeout:超时时间,超过时间会抛出异常。verify=False,SSL认证参数,false 表示不会认证
requests.post (url,data={请求体的字典})POST 请求,先由用户向目标 url 提交数据,然后服务器返回一个 HttpResponse 响应对象
requests.head()获取HTML网页头信息的方法,对应于 HTTP 的 HEAD 方法
requests.put()获取HTML网页提交PUT请求方法,对应于 HTTP 的 PUT
requests.patch()获取HTML网页提交局部修改请求,对应于 HTTP 的 PATCH
requests.delete()获取HTML页面提交删除请求,对应于 HTTP 的 DELETE

爬取一张 Python log 图片保存在本地

import requests
url = 'xxx'
#简单定义浏览器ua信息
headers = {'User-Agent':'Mozilla/4.0'}
#读取图片需要使用content属性
html = requests.get(url=url,headers=headers).content
#以二进制的方式下载图片
with open('C:/xxx/Desktop/img/python_logo.jpg','wb') as f:
    f.write(html)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值