python爬取入门——爬取中技网技术需求并存储入mysql数据库

一、打开中技网网站

  右键检查,找到可以进入二级网页即各个需求详情的入口,如图

  

 

 

 

 

  通过观察发现,这些二级网址包含在class名为con_js的div中,而里面只有一个a标签,因而可以用BeautifulSoup中soup.find_all(class_='conjs')获取这些div,然后遍历直接获取a标签的href属性,即soup[i].a['href']

 

 

 二、进入详情网页

  可以发现我们要爬的大部分信息都在class=ft_886_1这个div中,根据每个标签的class寻找即可,详细介绍在第一个class为ft_930_2的标签中

 

三、存入数据库

  下载MySQLdb模块并安装,参考https://blog.csdn.net/weixin_42840933/article/details/85274313

    数据库连接

    db = MySQLdb.connect("localhost", "root", "root", "db_mtest", charset='utf8')
    
     获取游标
    cursor = db.cursor()
    
   执行sql
    cursor.execute(sql)
    db.commit()

四、代码
  
import urllib.request
from io import BytesIO
import gzip
from bs4 import BeautifulSoup
import re
import MySQLdb

def getHtmls(url):
    headers = {'User-Agent': 'User-Agent:Mozilla/5.0'}
    datal=urllib.request.Request(url,headers=headers)
    response=urllib.request.urlopen(datal)
    print ('state code',response.getcode())
    data=response.read()
    str=data.decode('utf-8')
    soup=BeautifulSoup(str[1:])
    return soup


def getMessage(soup):
    items=soup.find_all(class_='con_js')
    db = MySQLdb.connect("localhost", "root", "root", "db_mtest", charset='utf8')
    cursor = db.cursor()
    #进入二级网址
    for item in items:
        secsoup=getHtmls('http://www.ctctw.com'+str(item.a['href']))
        #获取主要信息
        #标题
        msoup=secsoup.find(class_='r_494')

        #小项
        smsoupitems=msoup.find(class_='t_494_2').find_all(class_='bt')
        print(msoup.find(class_='t_494_1').text)
        sql = 'insert into zjwsj values(null,\'' + str(msoup.find(class_='t_494_1').text) + '\''
        for sit in smsoupitems:
            sql=sql+',\''+str(sit.text).split("")[1]+'\''
            print(sit.text)


        #详细介绍
        strs=secsoup.find_all(class_='ft_930_2')[0]
        print((strs.text).strip())
        sql=sql+',\''+(strs.text).strip()+'\')'
        try:
            print(sql)
            cursor.execute(sql)
            db.commit()
        except :
            db.rollback()


if __name__=='__main__':

    for i in range(13):
        try:
            getMessage(getHtmls('http://www.ctctw.com/list.aspx?node=3&f=cn&page='+str(i+1)))
        except:
            getMessage(getHtmls('http://www.ctctw.com/list.aspx?node=3&f=cn&page=' + str(i + 1)))

 




 

posted @ 2020-10-28 16:16  XiaoGao128  阅读(170)  评论(0编辑  收藏  举报