jiuridi 发表于 2020-4-17 23:23:55

刚学完爬虫,请问大佬们我这代码错在哪里了

from bs4 import BeautifulSoup   #网页解析,获取数据
import re       #正则表达式,进行文字匹配
import urllib.request,urllib.error      #制定URL,获取网页数据
import xlwt   #进行excel操作
import sqlite3#进行SQLite数据库操作





def main():
    baseurl = "https://www.zhipin.com/c101020100/?query=python&page="
    datalist = getData(baseurl)
    savepath = "BOSS直聘.xls"
    saveData(datalist,savepath)


#获取职业链接
findLink = re.compile(r'<div class="primary-box" href="(.*?)">')


#获取职业名称
findname = re.compile(r'<a href="/job_detail/c9fd4b764e292df61HFz2N26GFs~.html" title="Python" target="_blank" ka="search_list_jname_4" data-jid="c9fd4b764e292df61HFz2N26GFs~" data-itemid="4" data-lid="nlp-4mXnCYQcXG4.search.4" data-jobid="35930789" data-index="3">(.*)</a>')

#获取工作地址
findarea = re.compile(r'<span class="job-area">(.*)</span>')


#获取工资
findwage = re.compile(r'<span class="red">(\d*)K</span>')

#获取要求工作经验
findexp = re.compile(r'<p>(.*)年<em class="vline">')

#获取要求工作学历
findRec = re.compile(r'<em class="vline"></em>(.*)</em>')

#获取待遇
findTreatment = re.compile(r'<div class="info-desc">(.*)</div>')



#爬取网页
def getData(baseurl):
    datalist = []
    for i in range(0,10):       #调用获取页面信息的函数,10次
      url = baseurl + str(i*30)
      html = askURL(url)      #保存获取到的网页源码

         # 2.逐一解析数据
      soup = BeautifulSoup(html,"html.parser")
      for item in soup.find_all('div',class_="item"):   #查找符合要求的字符串,形成列表
            #print(item)   #测试:查看item全部信息
            data = []    #保存一部所有信息
            item = str(item)

            #工作的链接
            link = re.findall(findLink,item)   #re库用来通过正则表达式查找指定的字符串
            data.append(link)                     #添加链接

            name = re.findall(findname,item)
            data.append(name)                     #添加工作名字



            area = re.findall(findarea,item)
            data.append(area)                        #添加工作地址

            wage = re.findall(findwage,item)
            data.append(wage)                     #添加工资

            exp = re.findall(findexp,item)
            data.append(exp)                        #添加要求工作经验


            rec = re.findall(findRec,item)
            data.append(rec)                  #添加要求工作学历


            treatment = re.findall(findTreatment,item)          #工作待遇
            if len(treatment) != 0:
                inq = treatment.replace("。","")    #去掉句号
                data.append(treatment)                # 添加概述
            else:
                data.append(" ")                #留空



            datalist.append(data)       #把处理好的信息放入datalist

    return datalist


#得到指定一个URL的网页内容
def askURL(url):
    head = {
      "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122Safari / 537.36"
    }


    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
      response = urllib.request.urlopen(request)
      html = response.read().decode("utf-8")
      #print(html)
    except urllib.error.URLError as e:
      if hasattr(e,"code"):
            print(e.code)
      if hasattr(e,"reason"):
            print(e.reason)
    return html


def saveData(datalist,savepath):
    print("保存中....")
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)                              #创建workbook对象
    sheet = book.add_sheet('BOSS直聘.xls',cell_overwrite_ok=True)                           #创建工作表
    col = ("工作链接","工作名字","工资","要求工作经验","要求工作学历","工作待遇",)
    for i in range(0,6):
      sheet.write(0,i,col)                                                             # 每一列列名
    for i in range(0,250):
      print("第%d条" %(i+1))
      data = datalist
      for j in range(0,6):
            sheet.write(i+1,j,data)      #数据

    book.save(savepath)       #保存

if __name__ == "__main__":          #当程序执行时
#调用函数
    main()
    print("爬取完毕!")




wp231957 发表于 2020-4-18 13:32:24

我怀疑你没有获取数据
你可以在适当的地方放置一些print语句,查看一下

某一个“天” 发表于 2024-9-4 18:42:34

希望能帮你{:10_256:}
1. 正则表达式不匹配
正则表达式 findLink 是不正确的,因为它试图匹配一个不存在的 href 属性在 div 标签中。实际上,链接通常位于 a 标签中。
2. BeautifulSoup 和正则表达式的混合使用
既然已经使用了 BeautifulSoup 来解析 HTML,最好继续使用它来提取数据,而不是混合使用正则表达式。
3. 网页结构可能变化
网页的结构可能会变化,使用 BeautifulSoup 可以更好地适应这些变化。
4. Excel 写入数据
在写入 Excel 时,您应该检查 datalist 的长度,以避免索引超出范围。
5. 改进的数据提取
我将使用 BeautifulSoup 来改进数据提取。
页: [1]
查看完整版本: 刚学完爬虫,请问大佬们我这代码错在哪里了