以后每天写一两篇文章,大概一个月左右能把以前学爬虫的笔记整理好,孬好就这样了,以后去工厂还是工地都无所谓了,不纠结到底做什么了,反正编程只是爱好~

爬豆瓣

import requests
from lxml import etree'''1. 将目标网站上的页面抓取下来'''
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36','Referer': 'https://movie.douban.com/'
}
url = 'https://movie.douban.com/cinema/nowplaying/hefei/'response = requests.get(url, headers=headers)
text = response.text    # 豆瓣的代码比较正规,可以直接用text自动解码'''2. 将抓取下来的数据提炼'''
html = etree.HTML(text)
ul = html.xpath('//ul[@class="lists"]')[0]      # ul标签不止一个所以这里带上[0]
lis = ul.xpath('./li')                          # 获取ul标签下的所有li标签movies = []
for li in lis:          # 遍历出所有的li标签,并同时获取到li标签里面对应的片名,评分,片长等信息title = li.xpath('@data-title')[0]score = li.xpath('@data-score')[0]duration = li.xpath('@data-duration')[0]region = li.xpath('@data-region')[0]director = li.xpath('@data-director')[0]actors = li.xpath('@data-actors')[0]thumbamli = li.xpath('.//img/@src')[0]movie = {'片名': title,'评分': score,'片长': duration,'国家': region,'导演': director,'演员': actors,'海报': thumbamli,}movies.append(movie)for i in movies:print(i)

爬电影天堂

from lxml import etree
import requestsBASE_DOMAIN = 'https://www.dytt8.net'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}def get_detail_urls(url):        # 获取电影详情页url的函数response = requests.get(url, headers=HEADERS)# print(response.encoding)   # 查看requests模块当前自动解码使用的编码方式text = response.text         # 因为只是获取url链接所以这里用text,调用模块自己的解码,# 这个网站如果使用.content 自己指定编码会报错,因为这个网站里面有很多不规范的编码方式# 所以使用.text 让模块自己解码,如需要针对某一个页面或标签进行解码的时候可以单独解码:#                                 text = response.text.encode('gb2312').decode('gb2312')html = etree.HTML(text)detail_urls = html.xpath('//table[@class="tbspan"]//a/@href')# 直接一步获取class="tbspan"的table标签下的a标签的href属性detail_urls = list(map(lambda a: BASE_DOMAIN + a, detail_urls))return detail_urls'''上面的map函数等价于:
def abc(a):                    先定义一个函数,参数areturn BASE_DOMAIN + a     返回 BASE_DOMAIN + 参数aindex = 0
for detail_url in detail_urls:detail_url = abc(detail_url)   把列表detail_urls每次遍历出来的值作为上面函数的参数并调用执行这个函数detail_urls[index] = detail_url   把被这个函数糟蹋过的值按照原位改变赋值给列表detail_urls对应的下标index += 1
'''def parse_detail_page(url):     # 获取详情页里的标题、导演演员等...movie = {}response = requests.get(url, headers=HEADERS)text = response.content.decode('gbk')html = etree.HTML(text)title = html.xpath('//div[@class="title_all"]//font[@color="#07519a"]/text()')[0]movie['片名'] = titlezoomE = html.xpath('//div[@id="Zoom"]')[0]imgs = zoomE.xpath('.//img/@src')if len(imgs) > 1:cover = imgs[0]screenshot = imgs[1]movie['海报'] = covermovie['影片截图'] = screenshotinfos = zoomE.xpath('.//text()')# 这里已经匹配到所有的影片信息了,所有内容包括换行符什么的全部放到列表里了# 所以下面要通过遍历查找出需要的影片信息# return infosdef parse_info(info, rule):     # 用来去除空格和影片信息标题的函数return info.replace(rule, '').strip()# .replace()是替换字符串中指定子字符串(子文本替换);# .strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。for index, info in enumerate(infos):if info.startswith('◎年  代'):        # .startswith()是以什么什么开头info = parse_info(info, '◎年  代')movie['年代'] = infoelif info.startswith('◎产  地'):info = parse_info(info, '◎产  地')movie['产地'] = infoelif info.startswith('◎类  别'):info = parse_info(info, '◎类  别')movie['类别'] = infoelif info.startswith('◎豆瓣评分'):info = parse_info(info, '◎豆瓣评分')movie['豆瓣评分'] = infoelif info.startswith('◎片  长'):info = parse_info(info, '◎片  长')movie['片长'] = infoelif info.startswith('◎导  演'):info = parse_info(info, '◎导  演')movie['导演'] = infoelif info.startswith('◎编  剧'):info = parse_info(info, '◎编  剧')movie['编剧'] = infoelif info.startswith('◎主  演'):info = parse_info(info, '◎主  演')actors = [info]  # 主演是每行一个的,所以要for循环遍历出所有演员;这里先把这个已经遍历出来的加到列表里for i in range(index + 1, len(infos)):# index是上面一层for循环记录当前遍历次数的,这里是想让上面的for循环一直遍历下去actor = infos[i].strip()            # .strip() 删除空格后赋值给actorif actor.startswith('◎'):          # 直到遇到开头为◎的字符,说明演员的信息遍历完了break                           # 跳出循环actors.append(actor)                # 把遍历到的主演名字追加到列表里movie['主演'] = actors                  # 把结果(列表)放到字典表里elif info.startswith('◎简  介'):info = parse_info(info, '◎简  介')profiles = [info]                          # 简介前面有个换行,所以跟主演一样需要遍历for i in range(index + 1, len(infos)):profile = infos[i].strip()             # .strip() 删除空格后赋值给profileif profile.startswith('【下载地址】'):  # 直到遇到开头为【下载地址】的字符,说明简介的信息遍历完了break                              # 跳出循环profiles.append(profile)               # 把遍历到的所有简介内容追加到列表里movie['简介'] = ''.join(profiles)          # 把结果(列表)以空白字符转换成字符串,放到字典表里download = html.xpath('//td[@style="WORD-WRAP: break-word"]/a/@href')[0]movie['下载地址'] = downloadreturn moviedef spider():         # 调用url函数和解析数据函数并执行爬虫base_url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html'movies = []for i in range(1, 101):         # 控制页数的for循环url = base_url.format(i)    # 构造列表页的urlprint('第' + str(i) + '页电影如下:' + url)detail_urls = get_detail_urls(url)   # 执行获取详情页url链接的函数并赋值给detail_urls# print(detail_urls)for index, detail_url in enumerate(detail_urls):  # 遍历每一页所有电影详情页面的url的for循环movie = parse_detail_page(detail_url)         # 执行获取详电影情页内容的函数 传递每次遍历的urlmovies.append(movie)                          # 最终结果加入到列表里with open(r'C:\Users\Administrator\Desktop\movie.txt', 'a', encoding='utf-8') as f:f.write(str(movie) + '\n')print(movie)   # 遍历一次打印一次:字典表# print(movies)    # 打印所有加入到列表里后的结果:列表if __name__ == '__main__':spider()

爬腾讯招聘

import requests
from lxml import etreeBSE_DOMAIN = 'https://hr.tencent.com/'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}def get_detail_urls(url):            # 获取详情页urlresponse = requests.get(url, headers=HEADERS)text = response.texthtml = etree.HTML(text)detail_urls = html.xpath('//table[@class="tablelist"]//tr[@class!="h" and @class!="f"]//a/@href')detail_urls = list(map(lambda a: BSE_DOMAIN + a, detail_urls))return detail_urlsdef parse_detail_page(url):          # 解析招聘信息txzp = {}response = requests.get(url, headers=HEADERS)test = response.text# print(test)html = etree.HTML(test)title = html.xpath('//tr[@class="h"]/td/text()')[0]txzp['职位'] = titlegznrs = html.xpath('//table[@class="tablelist textl"]//text()')# return gznrsfor index, gznr in enumerate(gznrs):if gznr.startswith('工作地点:'):for i in range(index + 1, index + 2):gznr = gznrs[i].replace('工作地点:', '').strip()txzp['工作地点:'] = gznrelif gznr.startswith('职位类别:'):for i in range(index + 1, index + 2):gznr = gznrs[i].replace('职位类别:', '').strip()txzp['职位类别:'] = gznrelif gznr.startswith('招聘人数:'):for i in range(index + 1, index + 2):gznr = gznrs[i].replace('招聘人数:', '').strip()txzp['招聘人数:'] = gznrelif gznr.startswith('工作职责:'):gzzzs = []for i in range(index + 1, len(gznrs)):gzzz = gznrs[i].replace('工作职责:', '').strip()if gzzz.startswith('工作要求:'):breakgzzzs.append(gzzz)txzp['工作职责'] = ''.join(gzzzs)elif gznr.startswith('工作要求:'):gzyqs = []for i in range(index + 1, len(gznrs)):gzyq = gznrs[i].replace('工作要求:', '').strip()if gzyq.startswith('申请岗位'):breakgzyqs.append(gzyq)txzp['工作要求'] = ''.join(gzyqs)return txzpdef spider():                       # 执行爬虫base_url = 'https://hr.tencent.com/position.php?lid=&tid=&keywords=python&start={}'txzps = []for i in range(0, 91, 10):      # 0-91,间隔10递增:0 10 20 30 40 50 60 70 80 90url = base_url.format(i)    # 构造列表页urlprint(url)detail_urls = get_detail_urls(url)        # 获取每一列表页的详情页url# print(detail_urls)for detail_url in detail_urls:            # 遍历每一列表页的详情页urltxzp = parse_detail_page(detail_url)  # 解析数据txzps.append(txzp)print(txzp)# print(txzps)if __name__ == '__main__':spider()

这篇文章是我以前看知了课堂的21天搞定Python分布爬虫时的笔记
只是整理笔记,方便自己以后忘了回头再看,大神勿喷。

requests、xpath应用案例相关推荐

  1. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  2. Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件

    说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...

  3. #私藏项目实操分享#Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评

    前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: jieba模块: pandas模 ...

  4. Python爬虫实战,requests+xpath模块,Python实现爬取豆瓣影评

    前言 利用利用requests+xpath爬取豆瓣影评,废话不多说. 让我们愉快地开始吧~ 开发工具 **Python版本:**3.6.4 相关模块: requests模块: jieba模块: pan ...

  5. 爬虫利器 xpath 实践案例

    爬虫利器 xpath 实践案例 xpath chrome 使用xpath xpath . 表示当前 //表示当前标签下的所有标签 注: 要配合使用 /@匹配某标签的属性值: /@属性名称 获取弟节点- ...

  6. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  7. Reptile:requests + Xpath 爬取段子网的段子

    2019/1/24 中午路飞学成 爬虫课程 实验及笔记. Xpath是路飞爬虫课程中老师说的三种解析方式之一,前面是re正则表达式的解析方式,现在是xpath的解析方式,后面还有一个是bs4的解析方式 ...

  8. python使用requests+xpath爬取小说并下载

    这个爬虫只是选定热门小说,不支持自选搜索下载,日后会补充并改进. 选定小说网址: 笔趣阁 爬取: 需要导入的包 import requests from lxml import etree impor ...

  9. python从txt拿取数据_python requests + xpath 获取分页详情页数据存入到txt文件中

    直接代码,如有不懂请加群讨论 # *-* coding:utf-8 *-* # import json import requests import pytesseract import time i ...

  10. python中xpath如何获取内容_python requests + xpath 获取分页详情页数据存入到txt文件中...

    直接代码,如有不懂请加群讨论 # *-* coding:utf-8 *-* # import json import requests import pytesseract import time i ...

最新文章

  1. Apache关掉Etag和Last-Modified的方法
  2. 【MongoDB】MongoDB备份方法
  3. data (phantonjs onclick)exploring cleaning
  4. android ViewPager 图片浏览和保存图片
  5. 三次握手wireshark抓包分析,成功握手和失败握手
  6. linux虚拟存储技术,红帽Linux 7.0发布:整合虚拟存储技术
  7. 如何彻底搞懂面向 Web 开发者的正则表达式?
  8. 频频霸榜的 Python,竟遭开发者嫌弃!
  9. artTemplate -- 性能卓越的 js 模板引擎
  10. STM8S与IAR程序常用错误
  11. H5页面原生gps 定位获取经纬度
  12. 数据结构与算法基本概念
  13. VUCA时代下的敏捷
  14. CAD制图怎么使用CAD修剪命令呢?
  15. iPhone4 SIM失败?无效SIM?有效解决
  16. 玩一玩Spring容器(可视化笔记02)
  17. 内核中的gfp_t类型
  18. Xilinx ZYNQ开发板资料共享
  19. Kettle 记录集连接实战
  20. 《LINUX KERNEL MEMORY BARRIERS》

热门文章

  1. CSS基础常识问答(三)
  2. iOS SwiftUI ☞ UIKit框架的封装使用
  3. visio绘制网络拓扑图要求_必备!可以电脑在线使用的3款网络拓扑图软件安利
  4. java 苹果vcf解析_iOS开发- 生成/解析.vcf文件
  5. 如何用python制作3d游戏_【教程】12个步骤让你快速学会制作3D游戏
  6. 解析:浏览器事件冒泡及事件捕获
  7. 计算机高校教师面试试讲和答辩,高校教师试讲答辩面试考试流程
  8. Spoken English-口语-发音规则
  9. android冷启动优化方案汇总
  10. shader篇-单张纹理