找回密码
  注册[Register]
查看: 411|回复: 7

[python] 几十行简易爬虫收集全球网址大全

[复制链接]
发表于 2021-5-31 09:25 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

比较简单的爬取一些世界网址,源站点是一个收录站点,有很多不错的网站,以下代码会把全站收录的网站保存到db数据文件内


[Python] 纯文本查看 复制代码
import requestsimport os
from lxml import etree
from fake_useragent import UserAgent
import sqlite3
import time
 
# 设置 请求头
def RquestTools(url):
    headers = {
        'User-Agents': str(UserAgent().random)
    }
    response = requests.get(url, headers=headers).content.decode('gbk')
    html = etree.HTML(response)
    return html
#sqlite3字符处理,因为有些符号影响sqlite命令行,所以需要处理
def str_finishing(seif):
    str_temp = seif
    str = str_temp.replace("/","//")
    str = str.replace("\'","''")
    str = str.replace("[","/[")
    str = str.replace("]","/]")
    str = str.replace("%","/%")
    str = str.replace("_","/_")
    str = str.replace("(","/(")
    str = str.replace(")","/)")
    return str
# 设置请求网址
url = 'http://www.world68.com/country.asp'
# 获取url资源
html = RquestTools(url)
# 定位国家名称
country = html.xpath('//div[@class="content_all r"]/dl/dd/a[1]/text()')
# 定位国家地址
country_url = html.xpath('//div[@class="content_all r"]/dl/dd/a[1]/@href')
 
conn = sqlite3.connect("E:\\worldurl.db")  # 获取或创建数据库链接
litec = conn.cursor()  # 获取游标
 
for i, c in zip(country, country_url):
    sqltable = 'create table ' + i + '(urltype,urlname,urladdress,urlintroduce)'
    #print(str(sqltable))
    litec.execute(str(sqltable))#创建国家表\类型标签
    corntry_html = RquestTools(c)
    cont_r_sort_c = corntry_html.xpath('//div[@class="content_r_sort_c"]/ul/li/a/text()')
    cont_r_sort_c_url = corntry_html.xpath('//div[@class="content_r_sort_c"]/ul/li/a/@href')
    for v, m in zip(cont_r_sort_c, cont_r_sort_c_url):
        tryhtml = RquestTools(m)
        urls = tryhtml.xpath('//dl[@class="top_page"]/dt/a/@href')
        for ii in urls:
            tryhtm2 = RquestTools(ii)
            #网站名称
            country_name = "".join(tryhtm2.xpath('//div[@class="name_r r"]/a/text()'))
            country_name = str_finishing(country_name)
            #网站地址
            country_url = "".join(tryhtm2.xpath('//div[@class="name_r r"]/a/@href'))
            #网站简介
            country_lits = "".join(tryhtm2.xpath('//div[@class="jianjie_r r"]/p/text()'))
            country_lits = str_finishing(country_lits)
            sqladd = 'insert into ' + i + ' values (\'' + v + '\',\'' + country_name + '\',\'' + country_url + '\',\'' + country_lits + '\')'
            print(str(sqladd))
            litec.execute(str(sqladd))#新增 表单数据(网站类型\网站名称\网站Url\网站简介)
        conn.commit()# 提交修改事务
#关闭资料
litec.close()
conn.close()

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-5-31 09:40 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-5-31 10:05 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-5-31 10:05 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-5-31 11:15 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-5-31 11:28 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-5-31 11:30 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-5-31 23:37 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|广告投放|大牛论坛

GMT+8, 2024-5-13 01:21 , Processed in 0.042717 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表