一. 正则解析数据

解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正则并不能匹配并提取所有新闻的标题和url,如下图

target为确定值,在正则中可以写死,class也为确定值,在正则中也可写死,但class并不存在于所有的a标签中(自己的想法是写2个正则进行匹配(带class与否),最后将得到的数据汇总),mon里的数值也不一样,所以需要用正则匹配出来,到时候进行二次处理(若不需要的话),以下为代码(带class,同理不带class)

import re
import requests url = 'http://news.baidu.com/'
headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
} # response.text 不太准确 转码 是靠推测
data = requests.get(url, headers=headers).content.decode() # 正则解析 数据[\u4e00-\u9fa5]
pattern = re.compile('<a href="(.*?)" target="_blank" class="a3" mon="(.*?)"(.*)</a>') 
result = pattern.findall(data) 
print(result)

结果如下(截取部分图):

二. xpath解析数据

1. 安装支持并能解析html和XML的解析库 ------lxml:

pip install lxml

2. 转换数据的解析类型

xpath_data = etree.HTML(data)

3. xpath语法

1. “/”  表示节点

result = xpath_data.xpath('/html/head/title//text()')  # 按照节点顺序一级一级获取内容

2. “//” 表示跨节点

result = xpath_data.xpath('//a/text()')  # 跨节点获取内容

3.精确的标签: //a[@属性="属性值"]   

result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]')  # 得到a标签对象
result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]/text()') # 获取内容

4. 获取某个标签的url: @href

result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]/@href')

 代码

import re
import requests # 安装支持 解析html和XML的解析库 lxml
# pip install lxml
from lxml import etree url = 'http://news.baidu.com/'
headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
} # response.text 不太准确 转码 是靠推测
data = requests.get(url, headers=headers).content.decode() # 1.转解析类型
xpath_data = etree.HTML(data) # 2调用 xpath的方法
result = xpath_data.xpath('/html/head/title//text()')
result = xpath_data.xpath('//a/text()')
result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]')
result = xpath_data.xpath('//a[@mon="ct=1&a=2&c=top&pn=18"]/@href')
result = xpath_data.xpath('//li/a/text()') print(result)

with open('02news.html', 'w') as f:
  f.write(data)

三 练习1  爬取btc论坛title以及相应的url

   这个论坛爬取不到信息(html源码),应该是做了反爬处理了,可能的原因:

Ajax动态加载

ajax动态加载的工作原理是:从网页的url加载网页的源代码之后,会在浏览器里执行javaScript程序。这些程序会加载出更多的内容,并把这些内容传输到网页中。这就是为什么有些网页直接爬取它的URL时却没有数据的原因。

解决方案:

使用审查元素分析“请求”对应的连接(方法:审查元素--->Network---->清空,点击加载更多,出现对应的Get连接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。如果请求之前有页面,依据上一步的网址进行分析推导第一页。以此类推,抓取Ajax地址的数据。对返回的json使用request中的json进行解析,使用eval()转成字典处理

商业爬虫学习笔记day6的更多相关文章

  1. 商业爬虫学习笔记day1

    day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...

  2. 商业爬虫学习笔记day2

    1. get传参 (1)url中包含中文报错解决方法 urllib.request.quote("包含中文的url", safe = "string.printtable ...

  3. 商业爬虫学习笔记day4

    一.获取登录后页面信息的两种方法 1.第一种方法: 人为把有效cookies加到请求头中,代码如下 import urllib.request # 确定url url = "https:// ...

  4. 商业爬虫学习笔记day3

    一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...

  5. 商业爬虫学习笔记day8-------json的使用

    一. 简介 JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式.它基于 ECMAScri ...

  6. 商业爬虫学习笔记day7-------解析方法之bs4

    一.Beautiful Soup 1.简介 Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据.其特点如下(这三个特点正是bs强大的原因,来自官方手册) a. Beau ...

  7. 商业爬虫学习笔记day5

    一. 发送post请求 import requests url = "" # 发送post请求 data = { } response = requests.post(url, d ...

  8. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  9. python网络爬虫学习笔记(二)BeautifulSoup库

    Beautiful Soup库也称为beautiful4库.bs4库,它可用于解析HTML/XML,并将所有文件.字符串转换为'utf-8'编码.HTML/XML文档是与“标签树一一对应的.具体地说, ...

随机推荐

  1. css 跑马灯加载特效

    css 跑马灯加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  2. 4. 理解Update、Enter、Exit 与 添加、删除元素

    理解Update.Enter.Exit 与 添加.删除元素 在使用data()绑定数据时,例如:现在我们有一个数组[3,6,9,12,15],我们可以将数组每一项与一个<p>绑定,但是,现 ...

  3. 【Django】Mac 安装pip3-install-mysqlclient 报错

    1.首先在pip3-install-mysqlclient时报错 mysql_config not found 2.逛了一些博客 让安装mysql或者mysql-connector-c 我安装了后者还 ...

  4. Linux NameSpace (目录)

    1. User Namespace 详解 2. Pid Namespace 详解 3. Mnt Namespace 详解 4. UTS Namespace 详解 5. IPC Namespace 详解 ...

  5. Visual Studio 2019连接MySQL数据库详细教程

    前言 如果要在 Visual Studio 2019中使用MySQL数据库,首先需要下载MySQL的驱动 Visual Studio默认只显示微软自己的SQL Server数据源,点击其它也是微软自己 ...

  6. c++学习笔记(八)

    内联函数 概念 内联(inline)函数是c++为提高程序运行速度所做得一项改进. 与常规函数的区别不在于编写方式,而在于被调用时的运行机制不同----编译器使用函数代码替换函数调用. 引用内联函数时 ...

  7. 3组-Alpha冲刺-1/6

    一.基本情况 队名:发际线和我作队 组长博客:链接 小组人数:10 二.冲刺概况汇报 黄新成(组长) 过去两天完成了哪些任务 文字描述 组织会议,讨论了alpha冲刺的分工,确定了收集数据的渠道,为拍 ...

  8. Python基础(迭代)

    # from collections import Iterable#collections模块的Iterable类型判断 # dict1 = {'a':111,'b':222,'c':333} # ...

  9. Python 数据类型常用的内置方法(二)

    目录 Python 数据类型常用的内置方法(二) 1.字符串类型常用内置方法 1.upper.lower.isupper.islower 2.startswith.endswith 3.format ...

  10. Python 匿名函数用法和return语句

    匿名函数用法1.什么是匿名函数    函数定义过程中,没有给定名称函数,python中用lambda表达式创建匿名函数    lambda只是一个表达式,函数体比def简单    lambda主题是一 ...