专栏首页Python爬虫与数据挖掘手把手教你利用Python网络爬虫获取APP推广信息

手把手教你利用Python网络爬虫获取APP推广信息

/1 前言/

CPA之家app推广平台是国内很大的推广平台。该网址的数据信息高达数万条,爬取该网址的信息进行数据的分析。

/2 项目目标/

实现将获取到的QQ,导入excel模板,并生成独立的excel文档。

/3 项目分析——反爬措施处理/

前期测试时发现,该网站反爬虫处理措施很多,测试到有以下几个:

1. 直接使用requests库,在不设置任何header的情况下,网站直接不返回数据。

2. 同一个ip连续访问40多次,直接封掉ip,起初我的ip就是这样被封掉的。

为了解决这两个问题,最后经过研究,使用以下方法,可以有效解决。

1. 获取正常的 http请求头,并在requests请求时设置这些常规的http请求头。

2. 使用 fake_useragent ,产生随机的UserAgent进行访问。

/4 需要的库和网址/

1. 网址,如下所示:

https://www.cpajia.com/index.php?g=Wap&a=searchua

2. 需要用到的库:requests、time、lxml、ua

/5 项目实现/

1. 我们定义get_page方法, 准备url地址和请求头headers,导入对应的库。

import requests
import os
import re
from  fake_useragent import UserAgent
from lxml import etree

house_dict = {} #定义一个字典
def get_page(url, page_num):
        pass
url = 'https://www.cpajia.com/index.php?g=Wap&a=search' #网址
ua = UserAgent(verify_ssl=False) #随机的UserAgent
kv = {
    'User-Agent': ua.random}

pageList = get_page()

2. 下面介绍一下如何爬取ajax动态加载的网页方法。

3. 翻页时发现它的url并没有改变,无法简单的通过request.get()访问其他页面。据搜索资料,了解到这些网站是通过ajax动态加载技术实现。即可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

4. 通过分析响应请求,模拟响应参数。再通过requests库的request.post()函数去post相对应的参数即可。

具体方法如下:打开开发者工具,快捷键F12,不行就Fn + F12。

5. <1>标红的箭头network, 在其中可以看到服务器加载过来的资源。

< 2>标红的框框一个过滤器,你可以按照文件格式筛选。

6. Headers中的request method 中显示我们使用的是POST方法。而且FROM Data 中有一个参数,PageIndex。

利用Form Data 中的数据,编写一个字典,赋值给requests.post()中的data即可。

接下来就可以正常访问和翻页了!

7. 对网站发生请求

import requests
import os
import re
from  fake_useragent import UserAgent
from lxml import etree
def get_page(url, page_num):
    pageList = []
    for i in range(1, page_num + 1):
        formdata = {'PageIndex': i}
ua = UserAgent(verify_ssl=False)
kv = {'User-Agent': ua.random}

pageList = get_page()

8. 对请求到的数据进行处理,具体过程如下所示。

9. 用谷歌浏览器选择开发者工具或者按F12,找到相对应的QQ号的链接。

response = requests.post(url=url, data=formdata, headers=kv)
            html = response.content.decode('utf-8')
            parse_html = etree.HTML(html)
            page = parse_html.xpath('//div[@class="wrap"]//div[@class="list-main"]')
            for li in page:
               house_dict['项目'] = li.xpath('.//div[@class="main-top"]//b/text()')[0].strip()
               house_dict['QQ'] = li.xpath('.// div[ @class ="main-com"]//span//a/text()')[0].strip()
               #print(house_dict)

10. 将获取的信息写入excel表格

f = open('QQ号.csv', 'a', encoding='utf-8')  # 以'w'方式打开文件
               f.write(str(house_dict))
               print(house_dict)
               f.write("\n")# 键和值分行放,键在单数行,值在双数行
               f.close()

注:cvs文件会出现乱码,我们点击文件选择Excel工作薄,后缀名是xlsx;再点保存即可。

11. 输入要爬取的页数

pageList = get_page(url, 100)#页数(网址,页数)

/5 效果展示/

1. 点击绿色按钮运行,将结果显示在控制台,如下图所示。输入你要爬取的页数。

2. 打开Excel表格,如下图所示。

/6 小结/

1. 学习requests 库的使用以及爬虫程序的编写。

2. 学习使用反爬虫技术手段,并在实际应用中应用这些技术。

3. 不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。

4. 希望通过这个项目,能够找到合适的平台进行推广。

------------------- End -------------------

本文分享自微信公众号 - Python爬虫与数据挖掘(crawler_python),作者:Python进阶者

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于水晶易表的简介及其安装初识

    水晶易表是全球领先的商务智能软件商SAP Business Objects的最新产品,通常我们只需要简单的进行点击和拖拽操作,Crystal Xcelsius就...

    Python进阶者
  • Python大佬分析了15万歌词,告诉你民谣歌手们到底在唱什么

    前几天小编写了两篇利用Python采集网易云歌词和利用Python采集网易云音乐歌曲文章,相信小伙伴们经过实践之后都能够顺利的采集到自己想要听的歌曲。下面的歌词...

    Python进阶者
  • 反爬虫策略手把手教你使用FastAPI来限制接口的访问速率

    在网络爬虫的过程中,我们都会遇到各种各样的反爬虫,封禁IP和账号,设置验证码,前端加密,浏览器指纹,甚至输出假数据来等等都是可能出现的反爬手段,这些我们今天一个...

    Python进阶者
  • SAP ABAP二分查找(binary search)实际问题的深度分析

    (如果是内表TAB2,对COLUMN1排序的话,默认的COLUMN3也会自动安装升序排列):

    matinal
  • 多云实施管理工具知多少

    所有的云计算都不是相同的。虽然它们有着共同的操作集合,但是大部分的云计算都有着一个独特的API或者操作行为,这就使得自动化管理变得较为困难。其结果就是,管理多个...

    静一
  • 为什么黑名单<白名单

    通常,在编写负责文件上传的代码时,您会使用“白名单”(当您只能上传具有某些扩展名的文件时)或“黑名单”(当您可以上传任何文件时,检查下载文件的扩展名)不包括在列...

    字节脉搏实验室
  • 终于有人把云计算讲明白了

    导读:对于云计算的阐述,我们将从云计算概念、原理、分类、特点和应用这5个方面展开。

    华章科技
  • 调研:交通运输业云计算应用实践调查研究报告

    T客汇官网:tikehui.com 撰文 | 李哲 ? T客汇带您深入解读各行业云计算实践状况,本文是第六篇——交通运输业。 交通运输业云计算现状 (一)...

    人称T客
  • laravel项目出现Non-static method Redis::hGet() cannot be called statically的解决方法

      早上ytkah在配置laravel项目中出现Non-static method Redis::hGet() cannot be called statica...

    ytkah
  • 我国公共云服务市场需求启动仍相对缓慢

    工业和信息化部电信研究院日前发布2014年云计算白皮书指出,“云”已经成为ICT技术和服务领域的“常态”。产业界对待云计算不再是抱着疑虑和试探的态度,而是越来越...

    静一

扫码关注云+社区

领取腾讯云代金券