之前一直在做web开发,最近根据公司需要再次搞起了爬虫,虽然之前搞过,可是许多东西都忘得东东西西,敲起键盘来也是特别费劲,影响开发效率。今天周末,So特来整理一下。其实我不太喜欢写博客的,可是不写的话,又有不太好的地方,不是记不住什么,而是许多公司看重这个,虽然我觉得技术牛的永远是技术牛的,小白也会慢慢的成长。同时作为一个程序员,总要为这个社会发点实用的干货,方便我们一起共同成长,毕竟闭门造车的生活很难熬,希望今后的日子里,我愿在技术大牛的路上与大家共同前行,有什么做的不好的地方,希望大家多多指教。下面进入爬虫正题:

1.urllib方法

1、常用方法1、urllib.request.urlopen("网址")1、作用 :向网站发起一个请求并获取响应字节流 = response.read()字符串 = response.read().decode("utf-8")encode() : 字符串 --> bytesdecode() : bytes  --> 字符串2、重构User-Agent1、不支持重构User-Agent :urlopen()2、支持重构User-Agenturllib.request.Request(添加User-Agent)2、urllib.request.Request("网址",headers="字典")User-Agent是爬虫和反爬虫斗争的第一步,发送请求必须带User-Agent1、使用流程(见 02_urllib.request.Request.py)1、利用Request()方法构建请求对象2、利用urlopen()方法获取响应对象3、利用响应对象的read().decode("utf-8")获取内容
#02_urllib.request.Request.py
import urllib.requesturl = "http://www.baidu.com/"
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
# 1.创建请求对象(有User-Agent)
req = urllib.request.Request(url,headers=headers)
# 2.获取响应对象(urlopen())
res = urllib.request.urlopen(req)
# 3.响应对象read().decode("utf-8")
#html = res.read().decode("utf-8")
#print(html)
print(res.getcode())
print(res.geturl())
      2、响应对象response的方法1、read() :读取服务器响应的内容2、getcode()1、作用返回HTTP的响应码print(respones.getcode())200 :成功4XX :服务器页面出错5XX :服务器出错3、geturl()1、作用 :返回实际数据的URL(防止重定向问题)
2、urllib.parse模块1、urlencode(字典)  ## 注意:参数一定要为字典urlencode({"wd":"美女"})wd=%e8.......du = {"wd":"江西唯康信息网络有限公司"}2、quote(字符串) key = urllib.parse.quote("字符串")baseurl = "http://www.baidu.com/s?wd="key = input("请输入要搜索的内容:")#进行quote()编码key = urllib.parse.quote(key)url = baseurl + keyprint(url)
#例:
import urllib.request
import urllib.parse#拼接URL
baseurl = "http://www.baidu.com/s?"
key = input("请输入要搜索的内容:")
#进行urlencode()编码
wd = {"wd":key}
key = urllib.parse.urlencode(wd)url = baseurl + key
headers = {"User-Agent":"Mozilla/5.0"}
# 创建请求对象
req = urllib.request.Request(url,headers=headers)
# 获取响应对象
res = urllib.request.urlopen(req)
html = res.read().decode("utf-8")#写入本地文件
with open("搜索.html","w",encoding="gb18030") as f:f.write(html)
3、请求方式及实例1、GET1、特点 :查询参数在URL地址中显示2、案例 :抓取百度贴吧2、POST(在Request方法中添加data参数)1、urllib.request.Request(url,data=data,headers=headers)data :表单数据以bytes类型提交,不能是str2、处理表单数据为bytes类型1、把Form表单数据定义为字典data2、urlencode(data)3、转为bytes数据类型 :bytes()3、有道翻译案例4、有道翻译返回的是json格式的字符串,如何把json格式的字符串转换为Python中字典import jsonr_dict = json.loads(r_json)

2.re表达式

 正则表达式re1、使用流程1、创建编译对象 :p = re.compile("正则表达式")2、对字符串匹配 :r = p.match("字符串")3、获取匹配结果 :print(r.group())2、常用方法1、match(s) :字符串开头的第1个,返回对象2、search(s):从开始往后找,匹配第1个,返回对象3、group()  :从match或search返回对象中取值4、findall():所有全部匹配,返回一个列表3、表达式.  匹配任意字符(不能匹配\n)\d 数字\s 空白字符\S 非空白字符  [...] 包含[]内容 :A[BCD]E  --> ABE  ACE  ADE \w 字母、数字、_*  0次或多次?  0次或1次+  1次或多次{m} m次{m,n} m-n次  AB{1,3}C --> ABC ABBC ABBBC贪婪匹配(.*) :在整个表达式匹配成功的前提下,尽可能多的匹配*非贪婪匹配(.*?) :在整个表达式匹配成功的前提下,尽可能少的匹配*4、示例(贪婪模式和非贪婪模式)见 :见贪婪匹配和非贪婪匹配示例.py
#贪婪匹配和非贪婪匹配示例.py
import res = """<div><p>仰天大笑出门去,我辈岂是蓬蒿人</div></p>
<div><p>床前明月光,疑是地上霜</div></p>"""
# 创建编译对象
# re.S作用 :使 . 能够匹配 \n 在内的所有字符
# 贪婪匹配 : .*
p = re.compile('<div><p>.*</div></p>',re.S)
#非贪婪匹配 : .*?
p = re.compile('<div><p>.*?</div></p>',re.S)
# 匹配字符串s
r = p.findall(s)
print(r)
    5、findall()的分组
    #例:import re#解释 :先按照整体匹配出来,然后再匹配()中的# 如果有2个或者多个(),则以元组的方式取显示s = "A B C D"p1 = re.compile('\w+\s+\w+')print(p1.findall(s))# ['A B','C D']p2 = re.compile('(\w+)\s+\w+')# 第1步 :['A B','C D']# 第2步 :['A','C']print(p2.findall(s))p3 = re.compile('(\w+)\s+(\w+)')# 第1步 :['A B','C D']# 第2步 :[('A','B'),('C','D')]print(p3.findall(s))

3.requests方法

  1、安装(用管理员身份去打开Anaconda Prompt)Anaconda   : conda install requestsWindows cmd: python -m pip install requests## 以管理员身份去执行pip安装命令2、常用方法1、get(url,headers=headers) : 发起请求,获取响应对象2、response属性1、response.text :返回字符串类型2、response.content : 返回bytes类型1、应用场景 :爬取非结构化数据2.示例如下:
import requestsurl = "http://www.baidu.com/"
headers = {"User-Agent":"Mozilla/5.0"}
# 发请求获响应
response = requests.get(url,headers=headers)
response.encoding = "utf-8"
# 获取字符串
print(type(response.text))
# 获取字节流
print(type(response.content))
# 返回服务器响应码
print(response.status_code)
# 返回数据的URL
print(respone.url)
      3、response.encoding 一般返回 :ISO-8859-1response.encoding = "utf-8"4、response.status_code :返回服务器响应码5、response.url :返回数据的URL地址3、get()使用场景1、没有查询参数res = requests.get(url,headers=headers)2、有查询参数: params={}注 :params参数必须为字典,自动进行编码见 :09_requests.get.params.py
#09_requests.get.params.py
import requestsheaders = {"User-Agent":"Mozilla/5.0"}
url = "http://www.baidu.com/s?"
key = input("请输入要搜索的内容:")
params = {"wd":key}# 自动编码,自动拼接URL,params必须为字典
res = requests.get(url,params=params,headers=headers)
# 指定utf-8
res.encoding = "utf-8"
print(res.text)
    4、post() 参数名 :data1、data = {}2、示例 :10_有道翻译post.py
#有道翻译post.py
import requests
import json# 请输入你要翻译的内容
key = input("请输入要翻译的内容:")
# post方法要求data为字典格式
data = {"i": key,"from":"AUTO","to":"AUTO","smartresult":"dict","client":"fanyideskweb","salt":"1540373170893","sign":"a5d9b838efd03c9b383dc1dccb742038","doctype":"json","version":"2.1","keyfrom":"fanyi.web","action":"FY_BY_REALTIME","typoResult":"false"}# 发请求,获取响应
# url为POST的地址,抓包工具抓到的,此处去掉 _o
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
headers = {"User-Agent":"Mozilla/5.0"}
# 此处data为form表单数据
res = requests.post(url,data=data,headers=headers)
res.encoding = "utf-8"
html = res.text
# 把json格式字符串转换为Python中字典
r_dict = json.loads(html)
result = r_dict['translateResult'][0][0]["tgt"]
print(result)#把翻译后的结果输出来
# 请输入要翻译的内容 :你好
# hello#{'type': 'ZH_CN2EN',
# 'errorCode': 0,
# 'elapsedTime': 7,
# 'translateResult':
# [[{'src': '风云', 'tgt': 'Occasion'}]]
#}
#示例:
#cookie模拟登陆人人网
import urllib.requesturl = "http://www.renren.com/967469305/profile"
headers = {"Host":"www.renren.com","Connection":"keep-alive","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","Referer":"http://www.renren.com/",
#        Accept-Encoding: gzip, deflate"Accept-Language":"zh-CN,zh;q=0.9","Cookie":"anonymid=jnoaljpk7d3nh2; depovince=BJ; _r01_=1; _de=4DBCFCC17D9E50C8C92BCDC45CC5C3B7; ln_uact=13603263409; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; jebe_key=1b1f4a34-0468-4185-a3b0-6f2c38abc368%7C2012cb2155debcd0710a4bf5a73220e8%7C1540454149943%7C1%7C1540454153787; wp_fold=0; wp=0; jebecookies=2fc339e7-1b51-43ce-bc85-e2dc1f68ee16|||||; JSESSIONID=abcANrnqoMuLshY34pQAw; ick_login=30d0bd58-f6bb-437f-8d0d-6a72ae00e7b7; p=1e1b85cb8dda387a70e400a341c2e9c95; first_login_flag=1; t=4f652cc0a8f3fd50f5c9095c92d4717d5; societyguester=4f652cc0a8f3fd50f5c9095c92d4717d5; id=967469305; xnsid=55bff2d5; loginfrom=syshome"}req = urllib.request.Request(url,headers=headers)
res = urllib.request.urlopen(req)
print(res.read().decode("utf-8"))
#示例:
#猫眼电影top100抓取
import urllib.request
import re
import csvclass MaoyanSpider:def __init__(self):self.baseurl = "http://maoyan.com/board/4?offset="self.headers = {"User-Agent":"Mozilla/5.0"}self.page = 1self.offset = 0# 下载页面def loadPage(self,url):req = urllib.request.Request(url,headers=self.headers)res = urllib.request.urlopen(req)html = res.read().decode("utf-8")self.parsePage(html)# 解析页面def parsePage(self,html):p = re.compile('<div class="movie-item-info">.*?title="(.*?)".*?<p class="star">(.*?)</p>.*?releasetime">(.*?)</p>',re.S)r_list = p.findall(html)
#        print(r_list)# [("霸王别姬","张国荣","1994-01-01"),(),()...]self.writePage(r_list)def writePage(self,r_list):if self.page == 1:with open("猫眼电影.csv","a",newline="") as f:writer = csv.writer(f)writer.writerow(["电影名称","主演","上映时间"])for r_tuple in r_list:with open("猫眼电影.csv","a",newline="") as f:# 创建写入对象writer = csv.writer(f)
#                L = list(r_tuple)L = [r_tuple[0].strip(),r_tuple[1].strip(),r_tuple[2].strip()]# ["霸王别姬","张国荣","1994-01-01"]writer.writerow(L)def workOn(self):while True:c = input("爬取请按y(y/n):")if c.strip().lower() == "y":self.offset = (self.page-1)*10url = self.baseurl + str(self.offset)self.loadPage(url)self.page += 1else:print("爬取结束,谢谢使用!")breakif __name__ == "__main__":spider = MaoyanSpider()spider.workOn()
#示例:
#内涵吧信息抓取
import urllib.request
import reclass NeihanSpider:def __init__(self):self.baseurl = "https://www.neihan8.com/njjzw/"self.headers = {"User-Agent":"Mozilla/5.0"}self.page = 1# 下载页面def loadPage(self,url):req = urllib.request.Request(url,headers=self.headers)res = urllib.request.urlopen(req)html = res.read().decode("utf-8")self.parsePage(html)# 解析页面def parsePage(self,html):p = re.compile('<div class="text-.*?title="(.*?)".*?<div class="desc">(.*?)</div>',re.S)r_list = p.findall(html)# [("什么动物...","海豹"),(),()...]self.writePage(r_list)# 保存页面def writePage(self,r_list):for r_tuple in r_list:for r_str in r_tuple:with open("急转弯.txt","a",encoding="gb18030") as f:f.write(r_str.strip() + "\n")with open("急转弯.txt","a",encoding="gb18030") as f:f.write("\n")def workOn(self):self.loadPage(self.baseurl)while True:c = input("成功,是否继续(y/n):")if c.strip().lower() == "y":self.page += 1url = self.baseurl + "index_" +\str(self.page) + ".html"self.loadPage(url)else:print("爬取结束,谢谢使用!")breakif __name__ == "__main__":spider = NeihanSpider()spider.workOn()

python爬虫个人文档整理相关推荐

  1. python爬虫学习文档整理

    python爬虫文档收集: 1.正则表达式 2.Beautiful Soup4 3.Requests 4.Selenium with Pathon 5.Webdriver 6.Python3.6

  2. 全网最全python爬虫+数据分析资源整理

    4.29(第二天) 开篇词 你为什么需要数据分析能力? 第一模块:数据分析基础篇 (16讲) 01丨数据分析全景图及修炼指南 02丨学习数据挖掘的最佳路径是什么? 03丨Python基础语法:开始你的 ...

  3. python爬虫urllib文档_11.【文本】Urllib(下) - 零基础学习Python爬虫系列

    本文是视频av20148524的相关代码文档 # urllib(下) # post # post 和 get 传递参数同时存在的一个url url = "http://bbs.mumayi. ...

  4. Python爬虫遍历文档树

    1.直接子节点:.contents .children属性 .content Tag的.content属性可以将Tag的子节点以列表的方式输出 from bs4 import BeautifulSou ...

  5. Python爬虫_02_Python基础知识整理

    一.Python 1.1 注释 1.1 注释介绍 在我们工作编码的过程中,如果一段代码的逻辑比较复杂,不是特别容易理解,可以适当的添加注释,以辅助自己 或者其他编码人员解读代码. 没注释的代码 有注释 ...

  6. python爬虫实战教程分享 或许你可以看一下这篇文章

    如今人工智能风暴席卷全球,上至太空探索.航空器&汽车自动驾驶,下至每天在用的人脸识别.计算影像.机器翻译,这些科技产品和项目均由AI人工智能技术实现. 人工智能深刻地影响着我们的生活,是人类对 ...

  7. 学会Python+爬虫,从此和996 Say goodbye~

    996 一直是互联网老生常谈的话题了,我们工作越来越繁琐冗杂,几乎每日都要收集数以万计的表格数据.图表图片.各类邮件与资讯,做无数次的商业分析...面对繁杂的工作,大家一直在期待有一个解放生产力的好工 ...

  8. 北京理工大学·Python网络爬虫与信息提取·知识整理

    学习目标: python爬虫部分的学习 学习内容: mooc北京理工大学·Python网络爬虫与信息提取 对Scrapy内核依然一知半解,但mooc内容已经学完整理 后续将对Scrapy继续进行学习 ...

  9. python爬虫基础知识点整理

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

最新文章

  1. UA MATH566 统计理论5 假设检验:p值
  2. ASP.NET Core 中的静态文件
  3. (转) 深度模型优化性能 调参
  4. CAD转换图片的小窍门
  5. 机器学习--组合分类方法之AdaBoost算法实战(单层决策树原理代码详解)
  6. 23.3. DELETE
  7. 不一样的设计!20个国外优秀的电子商务网站
  8. 傅里叶变换 FFT 频谱泄漏?
  9. docker network详解、教程
  10. 信号完整性之铜皮粗糙度
  11. 科技如何激发女权主义并改变男性气质
  12. 标题栏、菜单栏、工具栏、状态栏
  13. h5大前端常用网站以及npm模块整理
  14. 第十三届蓝桥杯复盘及未来规划
  15. Python 《Python 实现 2048 游戏》实验报告
  16. 两万亿医疗市场中的IT生意 穆穆-movno1
  17. WLAN领域AP集群化的关键 CAPWAP协议
  18. 【校招VIP】产品项目分析之优势或不足
  19. python删除文件夹下面的所有文件
  20. Cuckoo Hash及其性质

热门文章

  1. python 化学计量学_【强烈推荐】十三个鲜为人知的大数据学习网站
  2. Asp.Net OA 集成RTX(腾讯通)开发实践
  3. Structural Deep Clustering Network阅读与翻译
  4. android 开发常用apk工具
  5. 基于WINDOS系统自带工具IIS配置文件下载服务器
  6. 周鸿祎:可穿戴设备将带来安全问题
  7. 佳能ix4000ix5000打印机清零
  8. 21中质协6Sigma六西格玛绿黑带考试题库资料学习培训视频下载
  9. 一键生成的BI智能数据看板谁不爱?
  10. 考研数据结构历年真题(算法设计题)整理