分类 Python 下的文章

一个很不错的Chrome插件,可以自动签到百度贴吧。

貌似商店已经搜不到了,Google搜索bpheclmhommpomjoeoifcggjmdelgaoj可以找到第三方的下载地址。

点击这里下载

安装

打开扩展工具 -> 打开 开发者工具 -> 拖入下好的插件 -> 安装成功。

使用

安装完成之后,几乎不需要任何操作,每天打开浏览器就会帮你自动签到了。

3.png

安装依赖库

主要用到requests、bs4、html2text、pytypecho等几个库,使用pip进行安装。

pip install requests bs4 html2text pytypecho

采集文章

找IP网为例,当然此网站文章也是采集而来。

文章列表地址:https://zhaoip.xyz/category/玩家攻略/

可以看到翻页的地址为列表地址后面加/页码/

用requests配合BeautifulSoup非常简单就能拿到文章地址。

for i in range(1,14):
res = requests.get('https://zhaoip.xyz/category/'+str(i)).text
bs = BeautifulSoup(res,'lxml')
links = bs.find('div',class_="区域样式").findAll('a')

拿到文章地址之后就是拿文章的标题和内容,使用bs也是很轻松就能拿到,将内容使用html2text改成markdown格式。

res = requests.get(link).text
bs = BeautifulSoup(res,'lxml')
title = bs.h2.text
content = html2text.html2text(str(bs.find('div',class_="样式"))

写入typecho

from pytypecho import Typecho,Post
te = Typecho('http://www.xhuosoft.cn/  typecho博客的xmlrpc地址', username='后台用户名', password='密码')
post = Post(title=title, categories = ['文章分类'],description=content)
te.new_post(post, publish=True)
time.sleep(5)#休息5秒

以上就是采集文章到typecho的相关流程。

近期有朋友说需要增加自己网站的流量,故用python写了一个简单的脚本,配合IP池或者动态IP都可以刷,当然最爽的是单窗口单IP。

说明

作弊可耻!

环境

python3.8 + selenium + 动态ip(或单窗口单ip)

代码

#-*- coding:utf-8 -*-
from selenium import webdriver
import time,requests,random
from selenium.common.exceptions import NoSuchElementException
chromeOptions = webdriver.ChromeOptions()

i = 0
while True:
    #免费IP池的话设置在下方,这边本地使用了单窗口单ip所以注销
    #ip = 'http://' + requests.get('http://localhost:5555/random').text
    # 设置代理
    #chromeOptions.add_argument("--proxy-server=%s"%ip)
    chromeOptions.add_argument('--headless')
    chromeOptions.add_argument('--disable-gpu')
    b = webdriver.Chrome(options = chromeOptions)
    try:
        b.get("目标网站")
        time.sleep(2)
        for k in range(1,5):
            j = random.randint(1,10)
            b.find_element_by_xpath('随机开几个网站div[{}]/ul/li[{}]/a'.format(k,j)).click()
            time.sleep(3)
        b.find_element_by_link_text("随机点几个栏目").click()
        j = random.randint(1,10)
        b.find_element_by_xpath('随机开几个网站ul[1]/li[{}]/a'.format(j)).click()
        time.sleep(5)
        b.find_element_by_link_text('随机点几个栏目').click()
        time.sleep(3)
        i += 1
        print('已刷新--',i,'--次')
    except Exception as e:
        print(e)
    b.quit()

使用说明

  1. 免费ip可自行搭建IP池
  2. 本案例之前采用的单窗口单ip,新建一个bat文件将脚本开N个进程一起刷贼快。
  3. 也可以使用动态IP但只能单进程刷,单窗口单IP刷量是动态IP的N倍。

缘起

之前公司找外面网络公司做某些业务相关关键词排名,了解了一下相关的情况,网络公司只需要我们提供网站地址和需要做的关键词即可,故猜想他们采取的方式应该是通过模拟用户搜索提升网站权重进而提升排名。

不过后续公司的网站卡在第二页那个公司一直也没能把排名做到首页,因为赶巧百度推出了惊雷算法打击这种刷排名的方式。

但这个算法实际的打击面应该并不会很精准,现在也依然还有很多公司在做这方面的业务。

之前接触到selenium,了解了一些基本的功能,今天尝试实现一下百度搜索相关关键词然后定位目标网站进行访问等基本操作。

注意事项

既然说到刷,必然涉及到使用海量的IP。

  • 自建IP池

一般可以自己搭建IP池,通过程序爬取各类免费IP网站上的IP和端口号,然后进行验证,可以用的就入库,不能用的就删掉。

但是免费的永远是最最贵的,虽然搭建比较简单,但IP的有效率很低且能用的基本速度也非常慢。

  • 购买IP

现在有很多IP服务商都提供爬虫接口,我试用过芝麻、牛魔、IP精灵、站大爷、ET等很多提供此类服务的服务商家的测试套餐,然鹅基本上都比我自建的IP池的质量都差,当然没有购买过收费套餐就暂不评论。

但是我就是想做个学习的测试就没有必要购买此类收费服务了,不过我发现了个非常靠谱的IP服务商。。他们家的免费测试的IP都能直接看爱奇艺720p,真心666,只想低调使用就不透漏了。

代码部分


from selenium import webdriver
import requests,time

#自建IP池
def get_proxy():
    r = requests.get('http://127.0.0.1:5555/random')
    return r.text

# 使用兔子IP免费爬虫代理
import random

FILE = './tuziip.txt'  # 读取的txt文件路径

# 获取代理IP
def proxy_ip():
    ip_list = []
    with open(FILE, 'r') as f:
        while True:
            line = f.readline()
            if not line:
                break
            ip_list.append(line.strip())
    ip_port = random.choice(ip_list)
    return ip_port


def bd():
    chromeOptions = webdriver.ChromeOptions()

    # 设置代理
    chromeOptions.add_argument("--proxy-server=http://"+proxy_ip())
    # 一定要注意,=两边不能有空格,不能是这样--proxy-server = http://202.20.16.82:10152
    browser = webdriver.Chrome(chrome_options = chromeOptions)

    # 查看本机ip,查看代理是否起作用
    browser.get("https://www.baidu.com/")
    browser.find_element_by_id("kw").send_keys("ip")
    browser.find_element_by_id("su").click()
    time.sleep(2)
    browser.find_element_by_id("kw").clear()
    time.sleep(1)
    browser.find_element_by_id("kw").send_keys("ip代理")
    browser.find_element_by_id("su").click()
    time.sleep(2)
    browser.find_element_by_id("kw").clear()
    time.sleep(1)
    browser.find_element_by_id("kw").send_keys("兔子ip代理")
    browser.find_element_by_id("su").click()
    time.sleep(2)
    browser.find_element_by_id("kw").clear()
    time.sleep(1)
    browser.close()
    # 退出,清除浏览器缓存
    browser.quit()
if __name__ ==  "__main__":
    while True:
        print(proxy_ip)
        bd()

运行程序,程序可自动打开浏览器,进入百度,搜索关键词IP,停顿2秒,清除搜索框内容,停一秒输入“IP代理”,然后停顿、清除、再搜索"目标关键词",然后清楚缓存退出浏览器,再更换IP开始新一轮。

如果要实现搜索目标关键词,选择目标网站点击进入目标网站,就需要使用selenium相关的元素选择了,这个就不多介绍了,很简单看下selenium的相关文档就ok了。

说明

闲着也是闲着,一堆废旧手机好几个微信账号,每天薅个早餐钱吧。

需求

监控线报网站有线报更新发送微信信息提醒。

from wxpy import *
import platform,sqlite3,time,requests
from bs4 import BeautifulSoup

#微信机器人配置
console_qr=(False if platform.system() == 'Windows' else True)
bot = Bot('bot.pkl', console_qr=console_qr)
tuling = Tuling('图灵接口自动回复')
my_friend = bot.friends()
tt = bot.groups().search('群名称')[0]

@bot.register(tt)
def send(msg):
    tt.send(msg)

@bot.register(my_friend)
def tuling_reply(msg):
    tuling.do_reply(msg)

@bot.register(msg_types=FRIENDS)
def auto_accept_friends(msg):
    new_friend = msg.card.accept()
    new_friend.send('您好,有什么可以帮您的吗?')

#创建数据库
#只采集链接和标题发送到微信群
conn = sqlite3.connect("./xianbao.db", check_same_thread=False)
cursor = conn.cursor()
try:
    sql = 'CREATE TABLE xianbao(id integer primary key autoincrement, via text NOT NULL UNIQUE,title text,pubtime datetime) '
    cursor.execute(sql)
except Exception as e:
    print("表已存在")
finally:
    conn.commit()

#线报采集以科学刀为例
def kxdao():
    site = '科学刀'
    r = requests.get('https://www.kxdao.net/forum-42-1.html')
    html = r.text
    bs = BeautifulSoup(html,'lxml')
    links = bs.findAll('a',class_='s xst')
    for link in links:
        url = link['href']
        title = link.text
        pubtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        msg = title + '\n' + url
        w = cursor.execute('INSERT INTO "xianbao" ("via", "title", "pubtime") VALUES (?, ?, ?)',
                       [url,title, pubtime])
        if w == True:
            print(msg)
            conn.commit()

#设置间隔时间五分钟
while 1:
    kxdao()
    time.sleep(300)