爬虫 Day2

这篇具有很好参考价值的文章主要介绍了爬虫 Day2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

resp.close()#关掉resp

一requests入门

       (一) 用到的网页:豆瓣电影分类排行榜 - 喜剧片

import requests

url = "https://movie.douban.com/j/chart/top_list"
#参数太长,重新封装参数
param = {
    "type": "24",
    "interval_id": "100:90",
    "action":" ",
    "start": 0,
    "limit": 20,
}
#根据网页设定get和post

resp = requests.get(url = url, params = param)
print(resp.request.url)
#text 抓取不下来
#print(resp.text)

        抓取结果:

爬虫 Day2,python

        (二)反爬

import requests

url = "https://movie.douban.com/j/chart/top_list"
#参数太长,重新封装参数
param = {
    "type": "24",
    "interval_id": "100:90",
    "action":" ",
    "start": 0,
    "limit": 20,
}
#根据网页设定get和post
#text 直接抓取不下来,要换headers
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
}
resp = requests.get(url = url, params = param,headers = headers)
print(resp.json())
# print(resp.text)
resp.close()#关掉resp

爬虫 Day2,python

注意到每次下滑刷新榜单只有start参数改变,20递增

爬虫 Day2,python

爬虫 Day2,python

二从html里提取数据--数据解析

1.正则re解析--效率高

2.bs4 beautiful soup解析--效率不高

3.xpath解析--简洁

1.正则解析

. 匹配换行符之外的所有

\w 匹配数字、字母、下划线        \W非数字、字母、下划线 

\s 匹配任意空白符                       \S

\d 匹配任意数字                          \D

\n 匹配换行符

\t 匹配制表符

^ 开始

$ 结束

a | b 匹配字符a或b

[] 字符组 [a-zA-Z0-9],

[^] 非字符组

* 重复0零次或更多次

+ 重复一次或更多次

? 重复0次或1次

{n}  重复n次

{n,} 重复n次或更多次

{n,m} 重复n到m次

例:你玩儿什么游戏,矿工游戏你会吗,晚上一起玩游戏吧

惰性匹配:尽可能多的匹配):玩儿.*?游戏 : 玩儿什么游戏

贪婪匹配:玩儿.*游戏 :玩儿什么游戏,矿工游戏你会吗,晚上一起玩游戏

爬虫 Day2,python爬虫 Day2,python

但我们需要的只是“周杰伦”和“林俊杰”。

2.示例

import re
#findall的结果是列表
#匹配字符串中所有符合正则的内容
lst = re.findall(r"\d+","我的电话是10010,我朋友的电话是10086")
print(lst)
print("")
#finditer: 匹配字符串中的所有内容【返回的是迭代器】,从迭代器中拿内容需要.group
it = re.finditer(r"\d+","我的电话是10010,我朋友的电话是10086")
for i in it:
    print(i.group())

爬虫 Day2,python

示例2:

findall

finditer

search

match

compile

import re
print("#findall的结果是列表")
#findall的结果是列表
#匹配字符串中所有符合正则的内容
lst = re.findall(r"\d+","我的电话是10010,我朋友的电话是10086")
print(lst)
print("")
print("#finditer: ")
#finditer: 匹配字符串中的所有内容【返回的是迭代器】,从迭代器中拿内容需要.group()
it = re.finditer(r"\d+","我的电话是10010,我朋友的电话是10086")
for i in it:
    print(i.group())
print("")
print("#serch:检索到一个就返回,检验存在性")
#serch是全文匹配返回的是match对象,拿数据需要.group(),检索到一个就返回,检验存在性
s = re.search(r"\d+","我的电话是10010,我朋友的电话是10086")
print(s.group())
print("")
print("#match是从头开始匹配")
#match是从头开始匹配
s = re.match(r"\d+","10010,我朋友的电话是10086")#"我的电话是10010,我朋友的电话是10086"
print(s.group())
print("")
print("#预加载正则表达式")
#预加载正则表达式
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话是10010,我朋友的电话是10086")
print("#这里输出的还是迭代器")#这里输出的还是迭代器
print(ret)
print("用迭代器输出:")
for i in ret:
    print(i.group())
print("#match:")
ans = obj.match("10010,我朋友的电话是10086")
print(ans.group())
# obj.search()
# obj.findall()

爬虫 Day2,python

示例3:

import re
s ="""
    <div class='jay'><span id = '1'>周杰伦</span><div>
    <div class='Ang'><span id = '2'>杨异或</span><div>
    <div class='jjaa'><span id = '3'>林经济</span><div>
    <div class='yja'><span id = '4'>周伦</span><div>
    <div class='may'><span id = '5'>五樱桃</span><div>
"""
#def compile(pattern,flags=0) flags是状态位
# () 特殊 在引号里面
#python输出时,end=''不换行
#(?P<分组名字>正则)可以单独从正则匹配的内容中进一步提取
obj = re.compile(r"<div class='(?P<engname>.*?)'><span id = '(?P<id>\d+)'>(?P<chiname>.*?)</span><div>",re.S) #让.能匹配换行符
result = obj.finditer(s)
for i in result:
    print(i.group("engname"),end=' ')
    print(i.group("chiname"),end=' ')
    print(i.group("id"))

爬虫 Day2,python文章来源地址https://www.toymoban.com/news/detail-841515.html

到了这里,关于爬虫 Day2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt day2

    实现登录框中,当登录成功时,关闭登录界面,并跳转到其他界面。 widget.cpp mainwindow.h MainWindow.cpp Main.cpp

    2024年02月13日
    浏览(39)
  • DAY2 Git

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 用于控制文件版本的分布式版本控制系统 1.乌龟壳(TortoiseGit) 初始化版本库:新建文件夹 → rightarrow → 文件夹内部右击Git在这里创建版本库 创建一个文件,以txt文件为例,修改后保存退出 文件夹内部

    2024年02月03日
    浏览(32)
  • ajax day2

    1、 2、控制弹框显示和隐藏: 3、右键tr,编辑为html,可直接复制tr部分的代码 4、删除时,点击删除按钮,可以获取图书id: 5、编辑图书 快速赋值表单元素内容,用于回显: 6、hidden 7、案例 个人信息设置 js代码部分:

    2024年02月10日
    浏览(48)
  • ARM Day2

    目录 实现1-100的累加 思维导图

    2024年02月07日
    浏览(39)
  • 【驱动开发day2作业】

    head.h mychrdev.c led.c

    2024年02月15日
    浏览(41)
  • C++学习(day2)

    C语言风格的字符串依然支持,使用字符数组的形式存储字符串,字符串标志:‘\\0’ C++风格的字符串,本质上是string类的对象 使用要求:需要加头文件:#include 单个数据的初始化和赋值 方式 解释 方式1 string s2 = “ni hao”; 方式2 string s3(“shang hai”); 方式3 string s4{“zhangpeng

    2023年04月24日
    浏览(41)
  • Go学习-Day2

    个人博客 驼峰法,首字母大写可以在其他包里使用,首字母小写只能在本包内使用 跨包使用,的import地址从src的子目录开始,src以及src所在的GOPATH自动补全 定义变量 var+变量名+变量类型 自动推断类型 简略写法 对应的,可以声明多个变量 另一种声明方法,开发中常用

    2024年02月12日
    浏览(41)
  • c高级Day2

     1. #include string.h #include stdio.h #include stdlib.h int main(int argc, const char *argv[]) {     int n, m;     printf(\\\"请输入行、列n\\\");     scanf(\\\"%d %d\\\", n, m);     int arr[n][m];       //循环输入数组     for(int i = 0; i n; i++)     {         for(int j = 0; j m; j++)         {             printf

    2024年02月03日
    浏览(9)
  • 【C刷题】day2

    1、以下程序段的输出结果是( ) A: 12 B: 13 C: 16 D: 以上都不对 【答案】: A 【解析】: 考点:转义字符 \\\\表示反斜杠,取消转义的作用 123表示八进制的123 t表示水平制表符,相当于Tab键 这些都是算一个字符,其他都是单独一个为一个字符,故为12个 2、若有以下程序,则运

    2024年02月07日
    浏览(36)
  • day2_C++

    #include

    2024年02月09日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包