解决方案:轩软SEO优化推广机器

优采云 发布时间: 2022-12-07 17:38

  解决方案:轩软SEO优化推广机器

  轩软SEO优化推广机是一款非常棒的软件。软件集成了上万条ip查询、Alexa排名查询、pr查询等站长常用查询网站。它易于安装且使用起来非常方便。快来QT软件园下载吧。

  

  介绍

  轩软SEO优化推广机集成了上万条ip查询、Alexa排名查询、pr查询等常用查询网站,因为这些网站大部分都有查询记录显示功能,查询记录可以查看百度、谷歌、搜狗、搜搜等,雅虎搜索引擎速度快收录,从而形成外链。因为这是正常查询生成的外链,这种外链可以显着增加收录,提高搜索引擎排名;批量提交后到查询网站查询你的网站数据库留下你的地址。查询网权重很高,蜘蛛经常访问,吸引蜘蛛爬到你的网站,更好的提高排名!我们的优势:全部免费,

  

  解决方案:1 爬虫入门 requests模块 UA伪装

  爬虫1 爬虫简介 1.1 什么是爬虫

  爬虫是通过编写程序模拟浏览器上网,然后从网页中抓取数据的过程。

  1.2 分类 1.2.1 通用爬虫和聚焦爬虫

  Universal Crawler:爬取一个网页的所有源代码。

  聚焦爬虫:爬取网页中的部分内容。

  Focused Crawler 建立在 Universal Crawler 之上。

  1.2.2 增量爬虫和分布式爬虫

  增量爬虫在上次爬取的基础上继续爬取数据,适用于继续爬取由于某种原因未爬取的数据或网站更新的数据;

  分布式爬虫就是将爬虫程序部署在多台服务器上,是一种提高爬虫效率的方法。

  1.3 反爬机制和反爬策略

  防爬机构

  网站应用反爬虫机制,防止爬虫爬取网站数据。

  反爬策略

  反爬策略应用于爬虫,用于**网站的反爬机制,对网站中的数据进行爬取。

  1.4 请求模块

  requests模块是一个基于网络请求的模块,可以用来模拟浏览器浏览过程。

  过程:

  指定网址;发起请求;获取响应数据;持久存储数据。1.5 Chrome开发者工具中Elements和Network的区别2案例搜狗搜索首页 2.1 抓取搜狗首页页面源码

  import requests

# 指定url

target_url = 'https://www.sogou.com/'

# 发起请求,获取响应对象

response_obj = requests.get(url=target_url) # 请求方式为get

# 获取响应数据

page_text = response_obj.text # 以字符串的形式获取响应数据

# 持久化存储数据

with open('./sogou.html', 'w', encoding='utf-8') as fp:

fp.write(page_text)

  2.2 简单网页采集

  基于搜狗搜索抓取任意搜索关键词的页面源码。

  重点:

  避免乱码UA伪装

  keyword = input('Please enter a keyword:')

target_url = 'https://www.sogou.com/web'

params = {

'query': keyword

}

# 进行UA伪装

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

response_obj = requests.get(url=target_url, headers=headers, params=params)

# 设置响应数据的编码格式,避免乱码。

response_obj.encoding = 'utf-8'

page_text = response_obj.text

filename = '{keyword}.html'.format(keyword=keyword)

with open(filename, 'w', encoding='utf-8') as fp:

fp.write(page_text)

  2.3 反爬策略一:UA伪装

  异常访问请求

  非浏览器向网站发起的请求称为异常访问请求。

  用户代理

  User agent,简称UA,是一个特殊的字符串头,表示请求载体的身份。

  服务器可以通过UA识别用户使用的操作系统及版本、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

  防爬机构

  一些网站会获取并判断请求头中的User-Agent来访问网站,如果通过UA识别请求者为爬虫,网站将拒绝提供数据。

  反爬策略:

  将爬虫发起的请求中的UA伪装成某个浏览器的身份。

  通用用户代理

  Safari:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50

Chrome

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

Firefox

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0

  3 案例爬取动态加载数据

  动态加载数据

  另一个新请求获取的数据称为动态加载数据。

  向浏览器地址栏中的当前页面url发送请求无法获取动态加载数据。

  3.1 豆瓣电影

  豆瓣电影精选电影

  目标:抓取热门电影页面上显示的电影名称和评分。

  判断目标数据是否属于动态加载的数据

  在Chrome选项卡Network中,找到当前地址栏中url对应的数据包,在其内部选项卡Response中部分检索某个页面显示的电影名称,例如,我想哭,我戴着猫*敏*感*词*。如果没有检索到,说明当前url对应的数据包中没有电影数据,页面显示的电影数据属于动态加载的数据。

  捕获动态加载数据

  全局搜索:点击左侧某个包,使用快捷键Ctrl+F搜索所有数据包,找到收录数据的包。

  搜索结果响应

  {"subjects":[{"rate":"6.5","cover_x":4800,"title":"想哭的我戴上了猫的*敏*感*词*"...

  可以知道返回的响应数据是一个Json格式的字符串。

  查看请求信息 Headers

  Request URL: https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0

Request Method: GET

  查询字符串参数

  type: movie

tag: 热门

sort: recommend

page_limit: 20

page_start: 0

  按照这个方法查看其他影片,可以发现通过修改参数page_limit和page_start,可以指定当前页面显示的页数和起始位置,例如:从第5条开始获取3条数据。

  target_url = 'https://movie.douban.com/j/search_subjects'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

params = {

'type': 'movie',

'tag': '热门',

'sort': 'recommend',

'page_limit': '3',

'page_start': '5',

}

response_obj = requests.get(url=target_url, headers=headers, params=params)

response_dict = response_obj.json()

film_list = response_dict['subjects']

for each_file_dict in film_list:

title = each_file_dict['title']

rate = each_file_dict['rate']

print(title, rate)

'''

咱们裸熊:电影版 7.6

午夜0时的吻 5.3

翻译疑云 7.2

'''

  3.2 肯德基餐厅信息

  目标:爬取北京肯德基餐厅的位置信息。

  肯德基餐厅信息查询:

  判断目标数据是否属于动态加载数据捕获动态加载数据

  数据包的响应数据

  {"Table":[{"rowcount":440}],"Table1":[{"rownum":1,"storeName":"前门","addressDetail":"西城区前门西大街正阳市场1号楼中部","pro":"Wi-Fi,礼品卡","provinceName":"北京市","cityName":"北京市"}...

  查看请求信息 Headers

  Request URL: http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname

Request Method: POST

  表单数据

  cname: 北京

pid:

pageIndex: 1

pageSize: 10

  target_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

pageIndex = 1

<p>

while True:

data = {

'cname': '北京',

'pid': '',

'pageIndex': str(pageIndex),

'pageSize': '10'

}

response_dict = requests.post(url=target_url, headers=headers, data=data).json()

restaurant_list = response_dict['Table1']

if len(restaurant_list) == 0:

break

for each_restaurant_dict in restaurant_list:

each_restaurant_name = each_restaurant_dict['storeName']

each_restaurant_address = each_restaurant_dict['addressDetail']

print(each_restaurant_name, each_restaurant_address)

pageIndex += 1

</p>

  3.3 化妆品生产许可信息

  化妆品生产许可证信息管理系统服务平台::81/xk/

  目标:获取企业名称、营业地址和生产地址。

  随便开一张化妆品生产许可证信息

  :81/xk/itownet/portal/dzpz.jsp?id=ff83aff95c5541cdab5ca6e847514f88

  包装信息

  标头

  Request URL: http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById

Request Method: POST

  表单数据

  id: ff83aff95c5541cdab5ca6e847514f88

  回复

  {"businessLicenseNumber":"91440101MA5CYUF0XX",...

  回到首页,全局获取Form Data中的id

  标头

  Request URL: http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList

Request Method: POST

  表单数据

  on: true

page: 1

pageSize: 15

productName:

conditionType: 1

applyname:

applysn:

  回复

  {"filesize":"","keyword":"","list":[{"ID":"ff83aff95c5541cdab5ca6e847514f88","EPS_NAME":"广东天姿化妆品科技*敏*感*词*",...

  main_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

id_list = []

for page in range(1, 6):

data = {

'on': 'true',

'page': str(page),

'pageSize': '15',

'productName': '',

'conditionType': '1',

'applyname': '',

'applysn': '',

}

data_list = requests.post(url=main_url, headers=headers, data=data).json()['list']

for each_dict in data_list:

id_list.append(each_dict['ID'])

detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'

for each_id in id_list:

data = {

"id": each_id

}

detail_dict = requests.post(url=detail_url, headers=headers, data=data).json()

print(detail_dict['epsName'], detail_dict['epsAddress'], detail_dict['epsProductAddress'])

  3.4 荣誉线下门店信息

  荣誉线下门店:

  目的:获取并保存荣耀北京线下门店信息。

  店铺详情页面:

  标头

  Request URL: https://openapi.vmall.com/mcp/offlineshop/getShopById?portal=2&version=10&country=CN&shopId=107527&lang=zh-CN

Request Method: GET

  查询字符串参数

  portal: 2

version: 10

country: CN

shopId: 107527

lang: zh-CN

  回复

  {"code":"0","shopInfo":{"address":"北京市顺义区新顺南大街4号鑫海韵通家电商城大卖场一层荣耀体验店","brand":1,"city":"北京市","dist":"顺义区","distance":0.0,"id":107527,"isStar":1,"latitude":"40.135089","longitude":"116.65831","name":"荣耀授权体验店(鑫海韵通电器商城店)","pictures":[],"province":"北京市","score":5,"serviceTime":"9:00-19:30","shopCode":"RYRA01000722","starShopPic":"https://res.vmallres.com/pimages//offlineshop/FOMuBZyeqTWYYJgMLPP2.jpg","type":1},"success":true}

  回到首页全局搜索shopId:107527

  标头

  Request URL: https://openapi.vmall.com/mcp/offlineshop/getShopList

Request Method: POST

  表单数据

  {"portal":2,"lang":"zh-CN","country":"CN","brand":1,"province":"北京","city":"北京","pageNo":1,"pageSize":20}:

  注意:此时Form Data的数据格式为Json格式。

  回复

  {"code":"0","shopInfos":[{"address":"北京市顺义区新顺南大街4号鑫海韵通家电商城大卖场一层荣耀体验店","brand":1,"city":"北京市",...

  import requests

import json

main_url = 'https://openapi.vmall.com/mcp/offlineshop/getShopList'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',

}

pageNo = 0

shop_id_list = []

while True:

data_dict = {

'portal': '2',

'lang': 'zh-CN',

'country': 'CN',

'brand': '1',

'province': '北京',

'city': '北京',

'pageNo': str(pageNo),

'pageSize': '20',

}

data_json = json.dumps(data_dict) # Form Data传入的数据转化为Json格式。

response_dict = requests.post(url=main_url, headers=headers, data=data_json).json()

shop_list = response_dict['shopInfos']

if len(shop_list) == 0:

break

for each_shop in shop_list:

shop_id_list.append(each_shop['id'])

pageNo += 1

shop_detail_list = []

detail_url = 'https://openapi.vmall.com/mcp/offlineshop/getShopById'

for each_shop_id in shop_id_list:

data_dict = {

<p>

'portal': '2',

'version': '10',

'country': 'CN',

'shopId': each_shop_id,

'lang': 'zh-CN'

}

response_dict = requests.get(url=detail_url, headers=headers, params=data_dict).json()

shopInfo_dict = response_dict['shopInfo']

name_str = shopInfo_dict['name']

address_str = shopInfo_dict['address']

service_time_str = shopInfo_dict['serviceTime']

shop_detail_list.append('name: {name_str}, address: {address_str}, service time: {service_time_str}\n'.format(name_str=name_str, address_str=address_str, service_time_str=service_time_str))

with open('./AllShopInfo.txt', 'w', encoding='utf-8') as fp:

fp.writelines(shop_detail_list)

</p>

  4 抓取图片 4.1 抓取图片操作

  示例图片:

  方法一:requests模块发送get请求

  import requests

headers = {

'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

img_url = 'https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/forum/pic/item/95eef01f3a292df57080696eab315c6034a8730e.jpg'

img_name = img_url.split('/')[-1]

img_path = './{filename}'.format(filename=img_name)

response_obj = requests.get(url=img_url, headers=headers)

img_data = response_obj.content

with open(img_path, 'wb') as fp:

fp.write(img_data)

  方法二:urllib模块

  import urllib

img_url = 'https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/forum/pic/item/95eef01f3a292df57080696eab315c6034a8730e.jpg'

img_name = img_url.split('/')[-1]

img_path = './{filename}'.format(filename=img_name)

urllib.request.urlretrieve(url=img_url, filename=img_path)

  与方法二(urllib模块)相比,方法一(requests模块)可以进行UA伪装。

  4.2 尴尬案情百科图片

  目标:批量抓取尴尬百科热图中的所有图片。

  尴尬百科热图:

  抓取第一页的图片

  import requests

import os

import re

dir_name = './imgs'

if not os.path.exists(dir_name):

os.mkdir(dir_name)

headers = {

'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

target_url = 'https://www.qiushibaike.com/imgrank/'

response_obj = requests.get(url=target_url, headers=headers)

response_obj.encoding = 'utf-8'

page_text = response_obj.text

ex = '.*?'

# 注意回车问题,re.S可以让正则表达式匹配时忽略回车。

img_src_list = re.findall(ex,page_text, re.S)

for each_src in img_src_list:

full_src = 'https:{src}'.format(src=each_src)

img_data = requests.get(url=full_src, headers=headers).content

img_name = each_src.split('/')[-1]

img_path = '{dir_name}/{img_name}'.format(dir_name=dir_name, img_name=img_name)

with open(img_path, 'wb') as fp:

fp.write(img_data)

print(img_name,'爬取成功。')

  第二页网址:

  分析具有不同页码的 URL。具有不同页码的 URL 之间的区别仅在于 URL 后半部分的页码。

  使用通用的 url 模板

  https://www.qiushibaike.com/imgrank/page/%d/

  import requests

import os

import re

dir_name = './imgs'

if not os.path.exists(dir_name):

os.mkdir(dir_name)

headers = {

'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

# target_url = 'https://www.qiushibaike.com/imgrank/'

url_model = 'https://www.qiushibaike.com/imgrank/page/%d/' # 通用url模板

for page_num in range(1, 10):

print('正在爬取第%d页的图片数据......' % page_num)

target_url = url_model % page_num

response_obj = requests.get(url=target_url, headers=headers)

response_obj.encoding = 'utf-8'

page_text = response_obj.text

ex = '.*?'

# 注意回车问题,re.S可以让正则表达式匹配时忽略回车。

img_src_list = re.findall(ex,page_text, re.S)

for each_src in img_src_list:

full_src = 'https:{src}'.format(src=each_src)

img_data = requests.get(url=full_src, headers=headers).content

img_name = each_src.split('/')[-1]

img_path = '{dir_name}/{img_name}'.format(dir_name=dir_name, img_name=img_name)

with open(img_path, 'wb') as fp:

fp.write(img_data)

print(img_name, '爬取成功。')

  4.3 案例现场主素材高清图片

  目标:批量抓取站长素材高清图片中的所有图片。

  站长素材高清图片:

  import re

import os

import requests

dir_name = './imgs'

if not os.path.exists(dir_name):

os.mkdir(dir_name)

headers = {

'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

}

target_url = 'http://sc.chinaz.com/tupian/'

response_obj = requests.get(url=target_url, headers=headers)

response_obj.encoding = 'utf-8'

response_text = response_obj.text

ex = r''

img_src_list = re.findall(ex, response_text, re.S)

url_root = 'http://pic2.sc.chinaz.com/files/pic/pic9/202006'

for each_img_src in img_src_list:

img_name_s = each_img_src.split('/')[-1]

img_name_list = img_name_s.split('_s')

img_name = img_name_list[0] + img_name_list[1]

img_url = '{url_root}/{img_name}'.format(url_root=url_root, img_name=img_name)

img_data = requests.get(url=img_url, headers=headers).content

img_path = '{dir_name}/{img_name}'.format(dir_name=dir_name, img_name=img_name)

with open(img_path, 'wb') as fp:

fp.write(img_data)

print(img_name, '爬取成功。')

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线