用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

python网络数据采集 wiki贝肯数6

2016-07-07 作者:ME80举报

[python]代码库

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
import pymysql

conn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '12345', db = 'mysql', charset = 'utf8')
cur = conn.cursor()
cur.execute("use wikipedia") # 使用数据库wikipedia

def insertPageIfNotExists(url): # page表
    cur.execute("select * from pages where url = %s",(url)) #根据半截url链接查找
    if cur.rowcount == 0: #使用cur.rowcount获取结果集的条数,如果是0
        cur.execute("insert into pages (url) values (%s)",(url)) # 将此url插入数据库
        conn.commit()
        return cur.lastrowid # 最后插入行的主键???
    else: # 如果查询到了数据
        return cur.fetchone()[0] # fetchone()取得结果集的下一行,返回一个单独的序列,没有可用数据则返回None,这里[0]项是id

def insertLink(fromPageId,toPageId): # links表
    cur.execute("select * from links where fromPageId = %s and toPageId = %s",(int(fromPageId),int(toPageId)))
    if cur.rowcount == 0:
        cur.execute("insert into links (fromPageId,toPageId) values(%s,%s)",(int(fromPageId),int(toPageId)))
        conn.commit()

pages = set()
def getLinks(pageUrl,recursionLevel):
    global pages
    if recursionLevel > 4: # 如果递归次数大于4
        return;
    pageId = insertPageIfNotExists(pageUrl) # 返回pages表里的数据的id号
    html = urlopen("http://en.wikipedia.org"+pageUrl) # http://en.wikipedia.org/wiki/Kevin_Bacon
    bsObj = BeautifulSoup(html,'html.parser')
    for link in bsObj.findAll("a",href = re.compile("^(/wiki/)((?!:).)*$")): # 找到当前词条页面内所有/wiki开头的词条链接
        # 将页内链接存入pages,返回id,然后将两个id存入links表
        insertLink(pageId,insertPageIfNotExists(link.attrs['href'])) # insertPageIfNotExists(link.attrs['href'])返回href在pages表里的id号
        if link.attrs['href'] not in pages: # 如果href链接没有保存过
            # 遇到一个新页面,加入集合并搜索里面的词条链接
            newPage = link.attrs['href']
            pages.add(newPage)
            getLinks(newPage,recursionLevel+1) # 递归,次数+1

getLinks("/wiki/Kevin_Bacon", 0)
cur.close()
conn.close()

[代码运行效果截图]


python网络数据采集 wiki贝肯数6


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。