Python爬虫进阶实战(增刊)之多线程SEO外链网址抓取同时打造自己的Python增外链工具 – Python量化投资
0°

Python爬虫进阶实战(增刊)之多线程SEO外链网址抓取同时打造自己的Python增外链工具

  我相信,很多人应该跟我一样。

  以前因为个人爱好做过一段时间的网站,新站成立的时候基本是大家最为焦虑的时候,没收录的时候天天查有没有被收录,收录后又要做外链,提高网站在搜索引擎的权重。而新站往往因为什么权重都没有,基本不会被换到友情链接,所以只能自己各种博客、论坛增加一些外链。

  后来,出现了一种超级外链工具,这种工具原理很简单,很多网站有搜索链接,当你的搜索时正巧被搜索引擎的蜘蛛程序爬到时,你在这个网站的搜索内容恰巧就会被记录下来,如果把搜索内容替换为你的域名,那么外链自然而言的就来了。

  卢松松的超级外链工具中的网址相对是比较多的,我们写一个爬虫抓取他的网址库,便于打造自己的外链工具。

网址库分析

  在开始增加后,通过chrome浏览器上F12调出调试工具后,页面访问数据如下图,

  此处我们要把访问这个网页时的requestsheader记录下来构造一个dict,后文有提供。

headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
 'Accept-Encoding': 'gzip, deflate, br',
 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
 'Cache-Control': 'no-cache',
 'Connection': 'keep-alive',
 'DNT': '1',
 'Host': 'tool.lusongsong.com',
 'Pragma': 'no-cache',
 'Upgrade-Insecure-Requests': '1',
 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}

  通过上述截图可以直观看出,该链接代表其数据库渠道,每页10个地址。Datanew.php?p=,这里的p就是页码参数,总网址数据有7137条,那么,网址中的参数p的取值范围就是[1,714]。(7137÷10向上取整)

网址清洗规则分析

  当我们所使用www.lizenghai.com(关键字)作为网址主体是,所有外链中都带有这个关键字,以此为思路,在抓取网址时批量替换关键字即可实现后续的格式化替换。

实现流程

  主要实现流程如下:

  • 1、网页内容获取函数。
  • 2、网页内容解析函数。
  • 3、单网址流程执行函数。
  • 4、单线程变多线程。

网页访问函数:

def getHtml(url, headers):
    # 访问url获取网页内从
    #headers = get_header()
    data = {'code':0,
            'message':'ok'}
    try:
        res = requests.get(url, headers=headers, timeout=20)
    except requests.ConnectTimeout:
        data['message'] = '超时'
        data['code'] = 100
    except requests.HTTPError:
        data['message'] = 'http状态码非200'
        data['code'] = 200
    except Exception as e:
        print(e)
        data['message'] = '其他错误'
        data['code'] = 300
    if data['code'] != 0:
        return data
    try:
        html = res.content.decode()
    except Exception as e:
        data['message'] = '解析错误'
        data['code'] = 400
        return data
    data['content'] = html
    return data

网页内容解析,解析url:

def getContentUrls(html):
    # 解析网页内容, 获取网页中的url
    try:
        doc = pq(html)
        all_li_a = doc('ul li a')
        urls = [x.attr['href'].replace('\n', '') for x in all_li_a.items()]
    except Exception as e:
        #print(e)
        return []
    return urls

多线程执行函数及其他执行代码:

def mainFunc(url):
    data = getHtml(url, headers)
    
    if data['code'] != 0 :
        return []
    html = data['content']
    urls = getContentUrls(html)
    return urls

def threadFunc(url):
    data = getHtml(url, headers)
    print(url, data['code'])
    if data['code'] != 0 :
        return []
    html = data['content']
    urls = getContentUrls(html)
    #print(urls)
    # 用于占用线程1秒,防止过快后被封。
    #time.sleep(1)
    return urls
def saveUrls(urls):
    # 保存url
    if len(urls) == 0:
        return
    mystr = '\n'.join(urls)
    mystr += '\n'
    with open('db.txt', 'a') as f:
        f.writelines(mystr)
    
#%%

if __name__ == '__main__':
    from multiprocessing.dummy import Pool as ThreadPool
    import time

    nums = 714
    target_urls = []
    for i in range(401, nums+1):
        url = 'https://tool.lusongsong.com/seo/datanew.php?p={}&dn=www.lizenghai.com'.format(i)
        target_urls.append(url)
    # 将所有url加入进程池
    pool = ThreadPool(20) 
    results = pool.map(threadFunc, target_urls)
    pool.close()
    pool.join() 

    for u in results:
        saveUrls(u)

 


「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论